C# 如何为这个类编写构造函数?

C# 如何为这个类编写构造函数?,c#,.net,oop,properties,constructor,C#,.net,Oop,Properties,Constructor,如何为名称编写属性? 和类的构造函数任何东西 例如,我可以使用foreach每次检查值。但我想知道还有其他方法吗?购买力平价很少能增加价值。因此我不使用Enum。 这只是我计划的一小部分。我是OOP的初学者。 我不使用数据库或表单。我通过oop在控制台中工作 如何为这个类编写构造函数 给任何东西分类 { 公共内容(字符串名称) { if(ppp.Contains(名称)) this.name=名称; 其他的 抛出新ArgumentException(“名称无效”); } 私有列表ppp=新列表(

如何为
名称
编写属性?
和类的构造函数
任何东西


例如,我可以使用foreach每次检查值。但我想知道还有其他方法吗?购买力平价很少能增加价值。因此我不使用Enum。 这只是我计划的一小部分。我是OOP的初学者。 我不使用数据库或表单。我通过oop在控制台中工作

如何为这个类编写构造函数

给任何东西分类
{
公共内容(字符串名称)
{
if(ppp.Contains(名称))
this.name=名称;
其他的
抛出新ArgumentException(“名称无效”);
}
私有列表ppp=新列表()
{ 
“表”,
“主席”,
“勺子”,
“面包”
};
私有字符串名称;
}
您可能已经注意到,我在代码中应用了一些C#约定:

  • PPP
    更改为
    PPP
    。按照惯例,私有字段在任何情况下都是较低的
  • 向私有字段添加了显式访问修饰符。这是更个人的偏好

  • 您可以在
    集合
    访问器中为
    名称
    控制:

    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;
    }
    
    给任何东西分类
    {
    公共内容(字符串名称)
    {
    Name=Name;//这将调用'set'访问器
    }
    列表PPP=新列表()
    { 
    “表”,
    “主席”,
    “勺子”,
    “面包”
    };
    私有字符串名称;
    公共字符串名
    {
    获取{返回名称;}
    设置
    { 
    如果(!PPP.包含(值))
    抛出新的ArgumentException(“值”);
    名称=值;
    }
    }
    }
    
    如果性能是一个问题,请将
    列表
    更改为
    哈希集

    公共类任何内容
    {
    私有列表PPP=新列表()
    { 
    “表”,
    “主席”,
    “勺子”,
    “面包”
    };
    私有字符串\u名称;
    //公共属性有权在课堂外阅读,但
    //使用私有setter仅在类内设置它
    公共字符串名{
    获取{return\u name;}
    私有集{
    //使用linq验证名称
    如果(购买力平价包含(价值))
    {
    _名称=值;
    }
    其他的
    {
    string message=string.Format(“{0}是不可接受的值!”,value)
    抛出新的InvalidOperationException(消息);
    }              
    } 
    };
    //建造师
    公共内容(字符串名称)
    {
    this.Name=Name;
    }
    }
    
    “PPP很少能增值。因此我不使用Enum”-我不理解这种推理。这感觉非常适合枚举…很少不是“从不”。我不太懂英语。也许我不对。我可以将项目添加到enum吗?谢谢您更正我的代码。你只需更改代码。现在所有的代码都需要知道可以添加枚举,但这并不意味着这是一种错误的方法-当然,对于您的
    列表
    ,情况也是如此。可能,但我可能会将枚举值名称本身改为英文,或者使用属性包含描述,或者使用i18n的资源查找。他要求一个构造函数。他的
    name
    是一个私有字段,而不是属性。@SamLeach添加了构造函数-我使用私有字段作为属性的支持字段。@DStanley但这是不可变类型和可变类型之间的区别。这是一个很大的区别。谢谢你的回答。我找到了我的答案,同时我还学到了一些关于你的代码的东西。好的,我会的。谢谢你的回答。这对我很有帮助。
    name = "bed" //must be an error.
    
    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;
    }
    
    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;
            }
        }
    }
    
    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;
        }
    }