c# convert existing class to use properties correctly

蹲街弑〆低调 提交于 2019-12-12 02:39:00

问题


I have the following classes:

class Given
{
    public string text = "";
    public List<StartCondition> start_conditions = new List<StartCondition>();
};

class StartCondition
{
    public int index = 0;
    public string device = "unknown";
    public string state = "disconnected";
    public bool isPass = false;
};

I want to convert them into c# properties (using get; and set;)

Looking at this question: what-is-the-get-set-syntax-in-c, it seems I can make a property nice and easy like this:

class Given
{
    public string text { get; set; }
    public List<StartCondition> start_conditions { get; set; }
};

class StartCondition
{
    public int index { get; set; }
    public string device { get; set; }
    public string state { get; set; }
    public bool isPass { get; set; }
};

But now I don't know how I should add my initialisations, because I want the same start values as I had before, or for the List container I want it to be new'ed.

What is the best way to achieve this?


回答1:


The ability to have auto property initializers is included since C# 6.0. The syntax is:

public int X { get; set; } = x; // C# 6 or higher



回答2:


Use a constructor. So your class would look like this:

public class StartCondition
{
    public int index { get; set; }
    public string device { get; set; }
    public string state { get; set; }
    public bool isPass { get; set; }

   // This is the constructor - notice the method name is the same as your class name
   public StartCondition(){
      // initialize everything here
      index = 0;
      device = "unknown";
      state = "disconnected";
      isPass = false;
  }
}



回答3:


Create a Constructor to start your class instance with the default values

class Given
{
    public Given(){
        this.text = "";
        start_conditions = new List<StartCondition>();
    }
    public string text { get; set; }
    public List<StartCondition> start_conditions { get; set; }
};

class StartCondition
{
    public StartCondition(){
        this.index = 0;
        this.device = "unknown";
        this.state = "disconnected";
        this.isPass = false;
    }
    public int index { get; set; }
    public string device { get; set; }
    public string state { get; set; }
    public bool isPass { get; set; }
};

Now you can create your instances with the default values by using StartCondition A = new StartCondition();




回答4:


If you are not using C# 6+ (or even if you are), you can explicitly declare your backing variables for properties:

public class Given
{
    private string _text = string.Empty;
    private List<StartCondition> _start_conditions = new List<StartCondition>();

    public string text { get{ return _text; } set{ _text = value; } }
    public List<StartCondition> start_conditions { get{ return _start_conditions; } set{ _start_conditions = value; } }
}

This allows you to set your initializations as before.



来源:https://stackoverflow.com/questions/40471294/c-sharp-convert-existing-class-to-use-properties-correctly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!