繁体   English   中英

如何为此类编写构造函数?

[英]How can I write constructor for this class?

class Anything
{
    List<string> PPP = new List<string>()
    { 
        "table", 
        "chair", 
        "spoon", 
        "bread"
    };

    string name;
}

name必须是PPP中的项目之一。

name = "bed" //must be an error.

我应该如何为name写属性? 还有班上的Anything吗?

例如,我可以每次使用foreach签出值。 但是我想知道还有其他方法吗? PPP很少能增加价值。 因此,我不使用枚举。 这只是我程序的一小部分。 我是OOP的初学者。 我不使用数据库或表格。 我通过oop在控制台中工作。

您可以在set访问器中控制它的name

class Anything
{

    public Anything(string name)
    {
        Name = name;   // this will call the `set` accessor
    }
    List<string> PPP = new List<string>()
    { 
        "table", 
        "chair", 
        "spoon", 
        "bread"
    };

    private string name;

    public string Name
    {
        get {return name;}
        set 
        { 
             if (!PPP.Contains(value)) 
                 throw new ArgumentException("value");

             name = value;
        }
    }
}

如果性能有问题, HashSet<string> List<string>更改为HashSet<string>

如何为此类编写构造函数?

class Anything
{
    public Anything(string name)
    {
        if(ppp.Contains(name))
            this.name = name;
        else
            throw new ArgumentException("Name invalid");
    }

    private List<string> ppp = new List<string>()
    { 
        "table", 
        "chair", 
        "spoon", 
        "bread"
    };

    private string name;
}

您可能已经注意到,我对您的代码应用了一些C#约定:

  1. PPP更改为ppp 约定是私有字段为lowerCamelCase。
  2. 在您的私有字段中添加了显式访问修饰符。 这是个人偏好。
public class Anything
{
    private List<string> PPP = new List<string>()
    { 
        "table", 
        "chair", 
        "spoon", 
        "bread"
    };

    private string _name;

    // Public property to have access for reading it outside the class but 
    // with private setter to set it only inside class
    public string Name {
       get { return _name; } 
       private set { 
           // Use linq to verify name
           if(PPP.Contains(value))
           {
               _name = value;
           }
           else
           {
               string message = string.Format("{0} is not acceptable value!", value)
               throw new InvalidOperationException(message);
           }              
       } 
    };

    // Constructor
    public  Anything(string name)
    {
         this.Name = name;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM