如何添加一个属性来表示样品名称,一旦初始化就不能更改?

时间:2019-02-08 20:02:41

标签: c# class properties immutability

我正在尝试在课堂上做一个财产。在属性初始化后无法更改的地方该怎么办?

这些是实际的说明:

  

在现有名称空间中创建一个类,可以在现有代码中   文件或新文件中,以磅为单位表示污垢量   样品。在此类(a)中,不要创建构造函数。 (b)继承   沙子类(利用沙子属性)。 (c)向   代表样品名称。一次不能更改此属性   (d)添加一个属性来表示和处理分配   粘土的数量,最小值为0。(e)将方法添加到   返回样品的重量,样品中砂的百分比   和样品中粘土的百分比。

我在(c)部分。我试图排除二传手。然后,我尝试使用只读,但由于我的类不能具有构造函数,因此它无法工作。

public class AmountSand //parent class
    {
    public class AmountSand {
 private double quantity;
 public double Sand {

  get {
   return quantity;
  }
  set {
   if (value >= 0) quantity = value;
  }
 }
}

public class AmountDirt: AmountSand { //part (b): inherited the parent class, AmountSand
  private string name = null;
  private double clay;

  public string Name { //here is where the specific property starts
   get {
    return name;
   }
   set {
    if (name == null)
     name = value;
   }
  } //ends

  public double Clay {
   get {
    return clay;
   }
   set {
    if (value >= 0) clay = value;
   }
  }

2 个答案:

答案 0 :(得分:0)

取决于您希望将其初始化的位置。

编辑:对不起,我没有读到您的课程可能有ctor,但是为了完整起见,我会保留此内容。您的班级没有老师似乎有点不可思议。请问为什么?

来自ctor:

class MyClass
{
    public MyClass()
    {
        Name = "Muhammed";
    }

    public MyClass(string newName)
    {
        Name = newName;
    }

    public string Name{get;}
}

如果您希望从类外部对其进行初始化,则您的代码距离不太远。您甚至可以删除支持属性。我会用

if(string.IsNullOrEmpty(Name))

而不是与null进行比较。

如果您希望通过类中的方法进行设置:

public string Name{get; private set;}

答案 1 :(得分:0)

字符串本质上已经是不可变的,因此您需要阐明您要完成的工作。

但是,如果您只是不想让其他任何东西能够设置除类本身之外的值,那么可以将设置的访问器设为私有。