Подтвердить что ты не робот

Виртуальные свойства

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

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

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

4b9b3361

Ответ 1

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;
}

Таким образом, ключевое слово virtual позволяет переопределить свойство в подклассах так же, как вы могли бы использовать методы get/set:

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

Ответ 2

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

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

Ответ 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();

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

Ответ 4

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

private string _name;

public string GetName()
{
   return _name;
}

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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