C# C语言中的虚拟/抽象字段#
在C#类中是否可能有虚拟/抽象字段?如果是,如何完成?否,只能将字段分配给not,覆盖 但是,您可能会使用一个属性,它看起来几乎相同C# C语言中的虚拟/抽象字段#,c#,.net,oop,abstract-class,C#,.net,Oop,Abstract Class,在C#类中是否可能有虚拟/抽象字段?如果是,如何完成?否,只能将字段分配给not,覆盖 但是,您可能会使用一个属性,它看起来几乎相同 public class MyClass { public int MyField; //field public virtual int MyProperty { get; set; } //property } 两者都是这样使用的: var x = new MyClass(); Debug.WriteLine("Field is {0}", x.M
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关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它
但是,您可以拥有虚拟或抽象属性:
public abstract string ModelName { get; set; }
字段是类中的存储位置-您不能“覆盖”它们或使其成为虚拟存储。
另一方面,属性可以是虚拟的或抽象的。属性只是get/set方法的语法糖,它执行检索或设置属性值的工作。属性可以是虚拟的,也许你可以从中获益。至少它在NHibernate中被大量使用
基本上,你必须有一个虚拟化的方法,虚拟场应该如何工作?不。你必须使用一个属性来完成你似乎要做的事情。一个老问题,但这是我的2美分: 尽管可能无法创建虚拟字段,但可以实现OP似乎想要的,即派生类的字段值与基字段值不同 只需在构造函数中为其指定“派生”值。
(尽管如果有像
inti=1;intj=i;
这样的字段初始值设定项,这还不够。)不,字段只是数据,不包含任何逻辑。没有可重写的内容,因此使用虚拟字段没有意义。有没有办法在基类中声明静态字段,但不提供值,而是让所有子类提供实际值?Imo字段是一个实现细节,所以这应该是不可能的。如果您希望创建类似于子代提供的静态“描述”属性的内容,我建议您研究属性,它允许您将自定义元数据与类型关联。这似乎满足了我的需要。非常感谢。