C# - 何时使用public int virtual,以及何时只使用public int

Gra*_*avy 22 c# asp.net-mvc entity-framework asp.net-mvc-3

我正在研究J Galloway的"Professional ASP.NET MVC 3"教程.在本教程中,Jon向我们展示了如何构建MVC音乐商店.

我正处于创建CS类的部分,首先使用EF代码对数据进行建模.

我书中的所有例子public virtual int property {get; set; }没有解释.虚拟这一术语无处不在.

在网络的其他地方,我还没有看到虚拟术语用于任何类型的一致性.

有人可以向我解释一下:

  1. 在这个特定背景下,术语"虚拟"的目的
  2. 使用'虚拟'是必要的吗?
  3. 为什么有些人使用"虚拟"而其他人不使用?
  4. 为什么有些人在定义外键时只使用'virtual'?
  5. "虚拟"一词的最佳实践用法是什么?

提前谢谢了

And*_*are 12

为了真正理解virtual您想要阅读多态性的关键字:

在封装和继承之后,多态性通常被称为面向对象编程的第三个支柱.多态性是一个希腊词,意思是"多形",它有两个不同的方面:

  1. 在运行时,派生类的对象可以在诸如方法参数和集合或数组之类的位置被视为基类的对象.发生这种情况时,对象的声明类型不再与其运行时类型相同.

  2. 基类可以定义和实现虚方法,派生类可以覆盖它们,这意味着它们提供自己的定义和实现.在运行时,当客户端代码调用该方法时,CLR会查找该对象的运行时类型,并调用该方法的覆盖.因此,在源代码中,您可以在基类上调用方法,并导致派生类的方法版本被执行.

一旦您更好地理解了这些概念,您就可以确定是否需要使用本书创建的方法virtual.


dan*_*wig 7

有人可以向我解释一下:

  1. 在这个特定背景下,术语"虚拟"的目的

    其他用户在这里得到了很好的参考.

  2. 使用'虚拟'是必要的吗?

    这取决于.有时它是必要的,有时它是多余的.

  3. 为什么有些人使用"虚拟"而其他人不使用?

    他们在需要时或在他们认为可能需要时使用它.

  4. 为什么有些人在定义外键时只使用'virtual'?

    定义外键供Entity Framework和NHibernate等对象关系映射工具使用时,virtual通常是必需的,因为这些ORM工具会动态创建一个继承自您的类的新类.这些"动态代理"类覆盖您的virtual属性,以提供维护外键一致性所需的其他行为.在NHibernate的情况下,必须标记所有属性(不仅仅是外键)virtual.这是因为NH动态代理添加了自定义行为来决定模型中要从数据库中检索哪些属性,以及哪些属性可以避免加载.

  5. "虚拟"一词的最佳实践用法是什么?

    当您打算在更多派生类中重写成员(方法或属性)时,请使用它.不要在标记的类中使用它们sealed.