2011-07-03 4 views
3

Можно ли опустить get или set в автоматическое свойство, когда оно объявлено виртуальным?C# виртуальные автоматические свойства omit get/set

Я имею в виду книгу на C#, который показывает членов System.Exception следующим образом:

 

// Properties 
public virtual IDictionary Data { get; } 
public virtual string HelpLink { get; set; } 
public Exception InnerException { get; } 
public virtual string Message { get; } 
public virtual string Source { get; set; } 
public virtual string StackTrace { get; } 
public MethodBase TargetSite { get; } 

Если автоматические свойства должны иметь как получить и установить, почему это нормально здесь?

Спасибо.

ответ

3

Это выглядит как сокращенном подписи для свойств, а не их фактической реализации.

I «ве не пошли отражатель, но вы можете себе представить, выше подпись для Exception.Data реализуется в одном из двух способов:

public virtual IDictionary Data 
{ 
    get { return _someInternalImplementation; } 
} 

Или:

public virtual IDictionary Data 
{ 
    get { return _someInternalImplementation; } 
    private set { _someInternalImplementation = value; } 
} 

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

4

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

Это в основном показывает, какие свойства есть и какие из них доступны только для чтения (что, вероятно, private сеттера.

Смежные вопросы