c# – 强制子类初始化字段

前端之家收集整理的这篇文章主要介绍了c# – 强制子类初始化字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有抽象基类,包含一些字段和一些作用于这些字段的方法.例如: @H_301_2@public abstract class A { protected double _field; public double SquaredField { get { return _field * _field; } } ... some other abstract methods }

我想强制A的所有孩子在他们的构造函数中初始化_field

@H_301_2@public class B : A { public B(double field) { _field = Math.Sqrt(field); } ... some other method implementations }

实现这一目标的正确模式是什么?

– 编辑

我最终做的是:

@H_301_2@public abstract class A { protected readonly double _field; public A(double field) { _field = field; } public double SquaredField { get { return _field * _field; } } ... some other abstract methods } public class B : A { public B(double field) : base(field) { } public static B CreateNew(double val) { return new B(Math.Sqrt(field)); } ... some other method implementations }

解决方法

根本不要将字段公开给派生类.相反,创建一个受保护的抽象属性: @H_301_2@public abstract class A { protected double Field { get; } public double SquaredField { get { return Field * Field; } } }

或者,如果字段对于特定实例应始终保持不变,请将其作为构造函数参数并将其保持为私有:

@H_301_2@public abstract class A { private readonly double _field; public double SquaredField { get { return _field * _field; } } protected A(double field) { _field = field; } }
原文链接:https://www.f2er.com/csharp/100889.html

猜你在找的C#相关文章