Статическая константа Пользовательский класс - PullRequest
2 голосов
/ 24 января 2012

Я пытаюсь создать постоянную статическую коллекцию пользовательского класса, например так:

public class MyClass
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

, а затем создать класс постоянных статических объектов MyClass

static class MyObjects
{
    public const MyClass anInstanceOfMyClass = { Property1 = "foo", Property2 = "bar" };
}

Но компилятор жалуется, что имена «Property1» и «Property2» не существуют в текущем контексте.Также, когда я делаю это:

public const MyClass anInstanceOfMyClass = new MyClass() { Property1 = "foo", Property2 = "bar" };

Компилятор жалуется, что Property1 и Property2 доступны только для чтения.Как правильно инициализировать постоянный статический класс этих объектов MyClass?

Ответы [ 3 ]

5 голосов
/ 24 января 2012

Попробуйте:

public static readonly MyClass AnInstanceOfMyClass = new MyClass() { Property1 = "foo", Property2 = "bar" };

Не упустите static class MyObjects без модификатора доступа.По умолчанию internal.Если вы намерены использовать это в той же сборке, у вас все будет хорошо, но если вы намерены использовать этот вспомогательный класс вне вашей сборки, вам нужно использовать ключевое слово public, как показано ниже:

public static class MyObjects
{
    public static readonly MyClass AnInstanceOfMyClass = new MyClass() { Property1 = "foo", Property2 = "bar" };
}

Обратите внимание, что я использую регистр Pascal для статических свойств в соответствии с рекомендациями Microsoft по соглашениям об именах в C #.

В дополнение к вышеприведенным комментариям здесь вы можете найти дополнительную информацию о readonlyи const ключевые слова:

4 голосов
/ 24 января 2012

Нельзя создать тип ссылки (кроме string) const. Используйте ключевые слова static и readonly.

0 голосов
/ 24 января 2012

«Const» значение должно быть время компиляции константа.Это означает, что это должен быть примитивный тип данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...