2012-02-11 5 views
25

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

class A 
{ 
    public virtual ICollection<B> prop{get;set;} 
} 

Может кто-нибудь сказать мне, что это значит?

+6

Это означает то же, что и виртуальные методы. –

+1

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

+0

Странно, мне нужно больше деталей, почему так и как оно используется? – Mackintoast

ответ

35
public virtual ICollection<B> Prop { get; set; } 

Переводит почти сразу:

private ICollection<B> m_Prop; 

public virtual ICollection<B> get_Prop() 
{ 
    return m_Prop; 
} 

public virtual void set_Prop(ICollection<B> value) 
{ 
    m_Prop = value; 
} 

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

public override ICollection<B> Prop 
{ 
    get { return null; } 
    set { } 
} 
0

Это коллекция, реализация которой может варьироваться в классе потомков.

1

Свойства - это укороченная форма методов доступа (Get & Set). Это означает, что ключевое слово virtual имеет то же значение, что и с любым другим методом. Это означает, что вы можете переопределить его в производных классах.

2

Свойства на самом деле являются специальными случаями методов Getter и Setter. Таким образом, они похожи на комбинацию методов чтения и, как показано ниже:

private string _name; 

public string GetName() 
{ 
    return _name; 
} 

public void SetName(string value) 
{ 
    this._name = value; 
} 

Так virtual ключевое слово такого же для свойств, а это означает, что переписываемый ребенок классы и начальной реализация может быть изменено.

5

В структуре Entity Framework (на мой взгляд, ваш пример ссылается) классы POCO создаются и завершаются в прокси-класс. Прокси-класс является потомком класса, который вы объявляете, поэтому ваш класс A становится базовым классом. Этот класс прокси заполняется данными и возвращается обратно к вам. Это необходимо для отслеживания изменений. Посмотрите на эту статью http://technet.microsoft.com/en-us/query/dd456848

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

1

У вас могут быть методы (часто), свойства, индексы или события, ключевое слово virtual имеет то же значение: изменение значения (переопределение) элемента базового класса. С помощью свойств вы можете изменить приемники get/set.

3

В объектно-ориентированном программировании виртуальное свойство является свойством, поведение которого можно переопределить внутри наследующего класса. Эта концепция является важной частью части полиморфизма объектно-ориентированного программирования (ООП).

взгляд на примере ниже:

public class BaseClass 
{ 

    public int Id { get; set; } 
    public virtual string Name { get; set; } 

} 

public class DerivedClass : BaseClass 
{ 
    public override string Name 
    { 
     get 
     { 
      return base.Name; 
     } 

     set 
     { 
      base.Name = "test"; 
     } 
    } 
} 

на уровне представления:

 DerivedClass instance = new DerivedClass() { Id = 2, Name = "behnoud" }; 

     Console.WriteLine(instance.Name); 

     Console.ReadKey(); 

выход будет «тест», так как свойство «Name» был переопределен в производном классе (подкласс).

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