我正在写一些代码,我发现当我创建一个没有 setter 的新抽象属性时,我无法在构造函数中设置它的值。为什么当我们使用普通属性时这是可能的?有什么不同?

protected Motorcycle(int horsePower, double cubicCentimeters)
{
    this.HorsePower = horsePower; //cannot be assigned to -- it is read only
    this.CubicCentimeters = cubicCentimeters;
}

public abstract int HorsePower { get; }

public double CubicCentimeters { get; }

很明显,如果我们想在构造函数中设置它,我们应该使用protected 或public setter。

最佳答案

是的,您有编译时错误,因为无法保证 HorsePower 有一个要分配给的支持字段。想象,

 public class CounterExample : Motorcycle {
   // What "set" should do in this case?
   public override int HorsePower {
     get {
       return 1234;
     }
   }

   public CounterExample()
     : base(10, 20) {}
 }

在这种情况下,this.HorsePower = horsePower; 应该做什么?

关于c# - 没有 setter 的抽象属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57432985/

10-11 19:05