Пишу array-like
класс, так что хотелось бы, чтобы процесс инициализации экземпляра моего класса был максимально приближен к привычной инициализации массивов
Право есть такая загвоздка:
Мы можем установить значения массива сразу, в фигурных скобках:
int[] a = new int[] { 1, 2, 3 };
Чтобы реализовать подобное поведение в пользовательском классе, необходимо реализовать метод Add
, тогда такой код:
MyClass my = new MyClass() { 1, 2, 3 };
Будет на деле развернут в
MyClass my = new MyClass();
my.Add(1);
my.Add(2);
my.Add(3);
Но, как я уже сказал, для этого потребуется делать публичный метод Add
, чего хотелось бы избежать, так как он не соотносится с логикой класса
Пока что вижу один вариант решения проблемы:
Создать метод Add
, но добавить к нему атрибут BrowsableAttribute(false), чтобы простые пользователи по крайней мере не видели его в списке доступных
Однако, возможно, есть более элегантное решение, о наличии которого я бы и хотел спросить у вас
От BrowsableAttribute мало толку, он вообще похоже не имеет никакого эффекта. Используйте хотя бы EditorBrowsableAttribute, который убирает метод из IntelliSence, если класс расположен в другой сборке. Ну а лучше, если вам нужен компактный синтаксис создания класса на основе массива, просто переопределить оператор преобразования:
public class MyClass
{
List<int> values = new List<int>();
public static implicit operator MyClass(int[] args)
{
MyClass x = new MyClass();
foreach (var item in args) x.values.Add(item);
return x;
}
}
public void Test()
{
MyClass my = new[] { 1, 2, 3 };
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Мне нужно чтобы в этом моменте, по истечении, к примеру, 5 секунд появлялось сообщение «Need a clue?»
Как реализовать сохранение rtf текста в базу данных и выгрузку его же из бд при помощи RichTextBox или другого элементаВ проекте использую wpf, mvvm
Код ниже (c# vs2010 winforms net40) определяет пользовательский текстбокс со свойствами "только для чтения" и "скрытым курсором"
Например так: нажал на левую сторону экрана - вывелось "Hi", а на правую - "Bye"Когда обе нажал - "Good"