C# - when to use public int virtual, and when to just use public int
我正在学习J Galloway的"专业ASP.NET MVC 3"教程。在本教程中,Jon向我们展示了如何构建MVC音乐商店。
我现在正在创建CS类,首先使用EF代码对数据建模。
我在书中的所有例子中,使用
在网络的其他地方,我没有看到虚拟这个词与任何形式的简洁性一起使用。
有人能给我解释一下吗:
提前多谢
为了真正理解
Polymorphism is often referred to as the third pillar of
object-oriented programming, after encapsulation and inheritance.
Polymorphism is a Greek word that means"many-shaped" and it has two
distinct aspects:At run time, objects of a derived class may be treated as objects of a
base class in places such as method parameters and collections or
arrays. When this occurs, the object's declared type is no longer
identical to its run-time type.Base classes may define and implement virtual methods, and derived
classes can override them, which means they provide their own
definition and implementation. At run-time, when client code calls the
method, the CLR looks up the run-time type of the object, and invokes
that override of the virtual method. Thus in your source code you can
call a method on a base class, and cause a derived class's version of
the method to be executed.
一旦你更好地理解了这些概念,你就可以确定你从书中创建的方法是否需要是
Could anybody explain to me:
"虚拟"一词在此特定上下文中的用途
这里的其他用户用非常好的参考资料回答了这个问题。
是否需要使用"虚拟"?
这要看情况而定。有时是必要的,有时是多余的。
为什么有些人使用"虚拟"而另一些人不使用?
他们在需要的时候使用它,或者他们认为他们可能需要它。
为什么有些人在定义外键时只使用"virtual"?
当定义对象关系映射工具(如实体框架和nHibernate)使用的外键时,
"虚拟"一词的最佳实践用法是什么?
当您打算在更派生的类中重写成员(方法或属性)时,可以使用它。不要在标记为
他在模型中使用虚拟关键字的原因是启用更改跟踪代理。这是实体框架特有的功能(edit:anhibernate,可能还有其他ORM,谢谢@danludwig),它允许ef自动管理映射到数据库的实体。
来自MSDN:
Each property that is mapped to a property of an entity type in the
data model must have non-sealed (NotOverridable in Visual Basic),
public, and virtual (Overridable in Visual Basic) get and set
accessors.
因此,术语virtual基本上是指"可重写"(具有基本实现),而不是抽象的(意味着没有原始实现)。
如果您希望有人重写您的方法或属性,而不是"hide",则"virutal"关键字是nessary。
所以这都适用于继承和多态性。派生类可以重写虚方法并使其成为自己的实现(甚至调用该方法中的基实现)。通过重写,您可以确保新方法将以多态方式调用,而不是基本实现。
相反,使用"new"关键字,您可以"隐藏"数据成员和方法。这将允许您也执行自己的实现,但不会以多态方式执行新的实现,它将使用基类实现。
虚拟关键词
使用覆盖和新关键字进行版本控制(C编程指南)
参见虚拟(C参考). 添加
virtual确保继承的子类通过强制它们重写属性来重写基类。如果没有虚拟关键字,子对象就不能重写基本功能。
来自DOCS
The virtual keyword is used to modify a method, property, indexer or
event declaration, and allow it to be overridden in a derived class.
因此,如果需要隐藏旧功能并添加新功能,可以使用虚拟功能。根据开发新的模块和体系结构,不同的应用需要不同的需求。
请参见http://msdn.microsoft.com/en-us/library/9fkccyh4(v=vs.80).aspx