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;
}
}