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

时间:2016-02-20 11:38:21

标签: c#

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

2 个答案:

答案 0 :(得分:4)

public virtual Genre Genre { get; set; }表示以下内容:

  1. 声明名为Genre的属性(第二次出现)
  2. 此属性的类型为Genre(第一次出现)
  3. 此属性可以阅读(get),可以更改(set)。
  4. 此属性可由任何其他有权访问此对象的库中的任何其他类读取或设置(public
  5. 可以通过子类覆盖此属性(将其代码替换为执行不同的操作)。 (virtual)。

答案 1 :(得分:1)

类型和名称是性别给你可能看起来令人困惑,但对于计算机来说,它是这样的:

一组修饰符,如public,private等。 + 类型 + 名称

所以它实际上并没有将第二个 Gender 视为一种类型,因为它只是某个东西的名称。在引擎盖下,它并不是指你通过名字创建的变量/属性。它使用某种指针或引用。

现在,如果您想询问如何解释该特定定义,则表示该属性应该在外部类中看到(它不是隐藏/私有)。如果使用继承,也可以改变其含义。它将返回类型为 Gender (类)的内容,它的名称为 Gender (如果您愿意,它几乎可以调用任何内容)。我还说它可以作为 Gender 类似值的容器,你可以自由地分配它并阅读它。

大多数细节都很重要,可以看到当您开始在更大范围内使用它的实例时修改行为。就在这个例子中,如果你去公共虚拟,那真的没什么区别。它有帮助吗?