c#中的虚拟/抽象字段
本文关键字:抽象 字段 虚拟 | 更新日期: 2023-09-27 18:09:24
是否可以在c#类中使用虚拟/抽象字段?如果有,是如何做到的?
虚拟/抽象字段?不。字段只是用来保存数据的。没有什么要实现的
你可以定义一个Virtual/Abstract Property
您可以使用虚拟或抽象属性:
public abstract string ModelName { get; set; }
不能,一个字段只能被赋值,不能被覆盖。
然而,你可以使用一个属性,它看起来几乎是一样的
public class MyClass {
public int MyField; //field
public virtual int MyProperty { get; set; } //property
}
都可以这样使用:
var x = new MyClass();
Debug.WriteLine("Field is {0}", x.MyField);
Debug.WriteLine("Property is {0}", x.MyProperty);
除非消费者使用反射,否则它看起来完全一样。
MSDN文档的第一句话回答了您的问题:
virtual关键字用于修改方法、属性、索引器或事件声明,并允许其在派生类中被覆盖。
http://msdn.microsoft.com/en-us/library/9fkccyh4 (v = vs.80) . aspx
No。字段不能是虚拟的,但属性可以。
No。你必须使用一个属性来完成你想要做的事情。
一个老问题,但这是我的两分意见:
虽然可能无法创建虚拟字段,但可以实现OP似乎正在寻找的内容,即派生类的字段值与基类的字段值不同。
在构造函数中直接赋值给它。
int i = 1; int j = i;
这样的字段初始化器,那么这还不够)。字段是类中的存储位置-您不能"覆盖"它们或使其成为虚拟的
另一方面,属性既可以是虚拟的也可以是抽象的。属性只是get/set方法的语法糖,get/set方法完成检索或设置属性值的工作。
属性可以是虚拟的,也许你可以从中获益。至少在NHibernate中大量使用。
基本上你必须有一个方法来虚拟化,虚拟领域应该如何工作?