C# 在C语言中使用虚拟仪器#

C# 在C语言中使用虚拟仪器#,c#,oop,virtual,C#,Oop,Virtual,C#中的virtual的目的是什么?正确的使用方法和理由是什么 例如,public-virtual-ICollection-Orders{get;set;}在Client类(例如,在餐厅或其他地方)中定义集合订单。为什么要在这里使用虚拟机?它的作用是什么?使用它的一般正确方法是什么?MSDN有答案 virtual关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它。例如,此方法可以被继承它的任何类重写: 如果要创建从客户端继承的子类,则可以重写此方法并使其为只读,或者修改get子句

C#中的
virtual
的目的是什么?正确的使用方法和理由是什么

例如,
public-virtual-ICollection-Orders{get;set;}
Client
类(例如,在餐厅或其他地方)中定义集合订单。为什么要在这里使用虚拟机?它的作用是什么?使用它的一般正确方法是什么?

MSDN有答案

virtual关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它。例如,此方法可以被继承它的任何类重写:


如果要创建从客户端继承的子类,则可以重写此方法并使其为只读,或者修改get子句,限制添加的集合的大小….etc

将类的属性/方法/etc定义为虚拟,这样就可以在派生类中重写它


为什么你会把它用于“客户类,比如在餐馆或其他地方”,这取决于你如何区分不同的客户。如果客户机的一个子组总是订购相同的东西,例如,您可以覆盖其派生类(来自客户机)中的orders属性,以始终返回该特定的订单。

虚拟函数不是特定于C的。它们允许算法在特定基类
父类
的对象上运行,在不知道
子类
的实现细节的情况下,继续在派生自类
父类
的类
子类
的对象上运行

一个简单的例子:。我们可能有一个具有各种控件的窗体。如果我们想检查我们有哪些控制措施,我们可以:

foreach (control in form.Controls)
  Debug.Print(control.ToString())
每个控件都属于某个类,该类在其祖先树中始终具有
Object
类,并且可以重写
ToString
,以提供它自己有意义的实现。但是,我们不需要知道表单上使用的每个控件类的
ToString
的实现细节,就可以完成这项工作。我们甚至不需要知道
ToString
是否被重写


有时,类库的设计者故意将一个类方法标记为虚拟的,即使默认的方法实现乍一看是非常通用的。这样做是为了将来的灵活性。您的
公共虚拟ICollection Orders{get;set;}
示例可能就是这种情况。将来可能从
客户机
类派生新类的开发人员可以选择为
订单
属性提供替代行为。例如,负责处理订单的基本库中的代码将继续在二进制级别上正确处理此类新类。无需重新编译基本库。

检查此链接它是面向对象编程的三大支柱之一。这个问题太大了,所以答案很难回答,你可以在当地的书店或图书馆找到很多书。