C#: Как установить значение по умолчанию для свойства в частичном классе?

То, что необходимо сделать, присоединить слушателей события div с id="results". Можно сделать, это путем добавления onkeyup, onkeydown, и т.д. приписывает div, когда Вы создаете его, или можно присоединить их с помощью JavaScript.

Моя рекомендация состояла бы в том, что Вы пользуетесь библиотекой AJAX как YUI, jQuery, Прототип , и т.д. по двум причинам:

  1. Это кажется, что Вы пытаетесь создать Автоматический Завершенный управление, которое является чем-то, что большая часть Ajax libaries должна обеспечить. Если можно использовать существующий компонент, Вы сохраните себя много времени.
  2. , Даже если Вы не хотите использовать управление, обеспеченное библиотекой, все библиотеки обеспечивают библиотеки события, которые помогают скрыть различия между событием API, обеспеченным различными браузерами.

Забывают addEvent, используют Yahoo! ’s, Утилита События предоставляет хорошую сводку того, что библиотека события должна предусмотреть Вас. Я вполне уверен что библиотеки события, обеспеченные jQuery, Прототипом, и. al. обеспечивают подобные функции.

, Если та статья пробегается через Вашу голову, взглянули на [1 111] эта документация первый и затем перечитывают исходную статью (я нашел, что статья имела намного больше смысла после того, как я пользовался библиотекой события).

Несколько других вещей:

  • Используя JavaScript дает Вам намного больше контроля, чем запись onkeyup и т.д. атрибуты в Ваш HTML. Если Вы не хотите сделать что-то действительно простой , я использовал бы JavaScript.
  • при написании собственного кода для обработки событий клавиатуры a , хорошая ссылка кода клавиши действительно удобна.

20
задан Roee Adler 13 August 2009 в 15:12
поделиться

5 ответов

Обновлено для C # 6

В C # 6 добавлена ​​возможность назначать значение по умолчанию для автоматических свойств. Значение может быть любым выражением (оно не обязательно должно быть константой). Вот несколько примеров:

// Initialize to a string literal
public string SomeProperty {get;set;} = "This is the default value";

// Initialize with a simple expression
public DateTime ConstructedAt {get;} = DateTime.Now;

// Initialize with a conditional expression
public bool IsFoo { get; } = SomeClass.SomeProperty ? true : false;

Исходный ответ

Автоматически реализованные свойства могут быть инициализированы в конструкторе класса, но не в самом свойстве.

public SomeModel
{
    IsSomething = false;
    SomeList = new List<string>();
}

... или вы можете использовать свойство с полевой поддержкой (немного больше работы ) и инициализировать само поле ...

private bool _IsSomething = false;
public bool IsSomething
{
    get { return _IsSomething; }
    set { _IsSomething = value; }
}

Обновление: Мой ответ выше не проясняет проблему того, что это находится в частичном классе. Ответ Мехрдада предлагает решение с использованием частичного метода, что соответствует моему первому предложению. Мое второе предложение использовать неавтоматически реализованные свойства (свойства, реализованные вручную?) Подойдет для этой ситуации.

38
ответ дан 29 November 2019 в 22:47
поделиться

Первое свойство (IsSomething) является логическим. По умолчанию это будет false.

Второе свойство, поскольку это ссылочный тип, по умолчанию будет равно null без каких-либо усилий с вашей стороны. Вам не нужно прикасаться к конструктору, поскольку ссылочные типы (классы) автоматически начинаются как null в .NET.

Если вы хотите использовать значение, отличное от значения по умолчанию, у вас будет два варианта -

Во-первых, используйте резервное хранилище:

private bool isSomething = true;
public bool IsSomething {
    get { return this.isSomething; }
    set { this.isSomething = value; }
}

Второй вариант - добавьте его в конструктор.

Обратите внимание, что первый вариант не имеет дополнительных накладных расходов - это в основном то, что делает компилятор, когда вы используете автоматическое свойство.

8
ответ дан 29 November 2019 в 22:47
поделиться

В двух частях частичного класса не может быть двух конструкторов. Однако вы можете использовать частичные методы для выполнения чего-то вроде этого:

// file1:
partial void Initialize();
public Constructor() {
    // ... stuff ... initialize part 1
    Initialize();
}

// file2:
void Initalize() {
    // ... further initializations part 2 might want to do
}

Если никакая часть частичного класса не определяет частичный метод, все вызовы к нему будут опущены.

5
ответ дан 29 November 2019 в 22:47
поделиться

Для этого не используйте автоматическое свойство, а старый способ

YourType _yourParameter = yourDefaultValue;
public YourType YourParameter
{
   get{return _yourParameter;}
   set{_yourParameter=value;}
}
4
ответ дан 29 November 2019 в 22:47
поделиться

Оба ваших свойства уже будут иметь значения по умолчанию, которые вам требуются.

Нет ничего плохого в наличии конструктора в частичном классе. Частичные классы никоим образом не являются особенными, за исключением того факта, что их исходный код распределен по множеству файлов / объявлений.

1
ответ дан 29 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: