在另一个类属性中使用类名?

3

我对C#还不是很熟悉。我有两个类,一个是电影类(Movie class),另一个是类型类(Genre class)。我不理解属性“public virtual Genre Genre”的含义,请问有人能解释一下吗?以下是这两个类:

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

此外,请参考这个问题(您的类看起来像EF模型):https://dev59.com/mWoy5IYBdhLWcg3wcNvh - Dennis
2个回答

6

public virtual Genre Genre { get; set; } 的意思如下:

  1. 声明一个名为 Genre 的属性(第二次出现)
  2. 这个属性的类型是 Genre(第一次出现)
  3. 这个属性可以被读取 (get) 和修改 (set)。
  4. 这个属性可以被任何其他具有访问此对象权限的类或库读取或设置 (public)
  5. 这个属性可以被子类覆盖(代码被替换为不同的内容) (virtual)。

1
类型和名称是性别,对你来说可能看起来很混乱,但对计算机来说就像这样:一堆修饰符(如public、private等) + 类型 + 名称。实际上,它并不认为第二个性别是一种类型,因为它只是某个东西的名称。在底层,它无论如何都不会引用您按其名称创建的变量/属性。它使用某种指针或引用。
现在,如果您想问如何解释特定的定义,它表示该属性应该在类外部可见(它不是隐藏的/私有的)。如果使用继承,也可以改变其含义。它将返回一个性别(类)的值,并且它的名称是性别(如果您愿意,几乎可以称之为任何名称)。它还表示它将作为那个性别类似值的容器工作,您可以自由地分配和读取它。
大多数细节都很重要,当您在更大的范围内开始使用实例时,可以看到它们会修改行为。仅在此示例中,如果您选择publicvirtual,实际上并没有区别。这有帮助吗?

谢谢Konrad,确实有帮助 :) - hEShaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接