2016-02-20 4 views
1

Я довольно новичок в C#. У меня есть два класса: класс фильма и класс жанра. Я не могу понять свойство «общедоступный виртуальный жанр жанра». Может ли кто-нибудь объяснить мне это? Ниже приведены два класса, используя имя класса в свойстве другого класса.?

public class Genre :IEntityBase 
{ 
    public Genre() 
    { 
     Movies = new List<Movie>(); 
    } 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Movie> Movies { get; set; } 
} 


public class Movie:IEntityBase 
{ 
    public Movie() 
    {               
     Stocks = new List<Stock>(); 
    } 
    public int ID { get; set; }   
    **public virtual Genre Genre { get; set; }** 
    public virtual ICollection<Stock> Stocks { get; set; } 
} 
+0

Также см. Этот вопрос (ваши классы выглядят как EF-модель): http://stackoverflow.com/questions/8542864/why-use-virtual-for-class-properties-in-entity-framework-model -definitions – Dennis

ответ

4

public virtual Genre Genre { get; set; } означает следующее:

  1. Объявляет свойство с именем Genre (второе вхождение)
  2. Это свойство типа Genre (первое вхождение)
  3. Это свойство можно прочитать (get) и может быть изменен (set).
  4. Это свойство можно прочитать или установить любой другой класс в любой другой библиотеке, имеющий доступ к этому объекту (public)
  5. Это свойство может быть переопределено (есть его код заменить на что-то другое) на подкласс. (virtual).
+0

Спасибо большое codran – hEShaN

1

тип и имя являются Пол который вам может показаться запутанным, но на компьютере это так:

связка модификаторов, как государственные, частные и т.д. + тип + имя

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

Теперь, если вы хотите спросить, как интерпретировать это конкретное определение, в нем говорится, что свойство должно быть замечено за пределами класса (это не скрыто/закрыто). Также можно изменить его значение, если вы используете наследование. Он вернет что-то типа Пол (класс), и его зовут Пол (и его можно было бы назвать почти чем угодно, если хотите). Я также говорю, что он будет работать как контейнер для этого значения, и вы можете свободно назначить его и прочитать.

Большая часть деталей важна и может быть замечена, чтобы изменить поведение, когда вы начинаете использовать экземпляры его в большей области. Как раз в этом примере, на самом деле нет никакой разницы, если вы идете public или virtual. Помогло ли это?

+0

Thank U Konrad. он действительно помог :) – hEShaN

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