c# – 在继承的类中初始化字段
发布时间:2020-12-15 06:42:17 所属栏目:百科 来源:网络整理
导读:在继承类中初始化常量或其他字段的最佳方式是什么?我意识到在这个例子中有很多语法错误,但这是一个很好的例子来清楚地说明我正在做的事情. public abstract class Animal { public abstract const string Name; // #1 public abstract const bool CanFly; p
在继承类中初始化常量或其他字段的最佳方式是什么?我意识到在这个例子中有很多语法错误,但这是一个很好的例子来清楚地说明我正在做的事情.
public abstract class Animal { public abstract const string Name; // #1 public abstract const bool CanFly; public abstract double Price; // price is not const,because it can be modified public void Fly() { if (!CanFly) Debug.Writeln("{0}s can't fly.",Name); else Debug.Writeln("The {0} flew.",Name); } } public class Dog : Animal { public override const string Name = "Dog"; // #2 public override const bool CanFly = false; public override double Price = 320.0; } public class Bird : Animal { public override const string Name = "Bird"; public override const bool CanFly = true; public override double Price = 43.0; } 我要完成的几件事情 >基类必须分配这3个字段. 我知道你可以在一个构造函数中初始化这些字段(如果你摆脱了const),但是不能保证被赋值.如果您将这些字段替换为属性,并覆盖它们,则仍需要初始化属性的后备字段.你如何实现这一点? 它抱怨的几个语法错误: >修饰符’abstract’在字段上无效.尝试使用属性. (#1) 解决方法
如果一个基类需要一个派生类提供的值,最常见的两种方法是:
要求在构造函数中: public readonly double Price; protected BaseClass(double price) { this.Price = price; } 派生类必须将价格传递给构造函数: public Derived() : base(32) { } 或者,使其成为抽象属性: public abstract double Price { get; } 派生类必须提供一些返回值的方法(尽管它们在哪里得到它取决于派生类,这在许多情况下提供了更多的灵活性): public override double Price { get { return 32; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读