虚拟属性

我只使用和学习了基类的虚方法,而不了解所使用的虚拟属性

class A { public virtual ICollection prop{get;set;} } 

有人能告诉我这是什么意思吗?

 public virtual ICollection Prop { get; set; } 

几乎直接翻译为:

 private ICollection m_Prop; public virtual ICollection get_Prop() { return m_Prop; } public virtual void set_Prop(ICollection value) { m_Prop = value; } 

因此,virtual关键字允许您覆盖子类中的属性,就像上面的get / set方法一样:

 public override ICollection Prop { get { return null; } set { } } 

在Entity Framework(我相信您的示例引用)中,您的POCO类被创建并包装到代理类中。 代理类是您声明的类的后代,因此您的类A成为基类。 此代理类将填充数据并返回给您。 这是跟踪变化所必需的。 看看这篇文章http://technet.microsoft.com/en-us/query/dd456848

我在尝试理解这个问题时遇到了类似的问题,经过一些调试会话后,看到代理类并阅读跟踪更改后,我们就会弄清楚它为什么被声明的方式。

在面向对象的编程中,虚拟属性是一种属性,其行为可以在inheritance类中被覆盖。 这个概念是面向对象编程(OOP)的多态部分的重要部分。

看下面的例子:

 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”属性已在派生类(子类)中被覆盖。

属性实际上是Getter和Setter方法的特殊情况。 所以它们就像Getter和Setter方法的组合,如下所示:

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

因此, virtual关键字对于属性也是相同的,这意味着它可以被子类覆盖,并且可以更改初始实现。

属性是一种缩写forms的存取方法(Get&Set)。 这意味着virtual关键字与任何其他方法具有相同的含义。 这意味着您可以在派生类中覆盖它。

您可以拥有方法(通常),属性,索引器或事件,virtual关键字具有相同的含义:修改基类项的含义(覆盖)。 使用属性,您可以更改get / set访问器。

这是一个集合,其实现可以在后代类中变化。