[英]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#约定:
PPP
更改为ppp
。 约定是私有字段为lowerCamelCase。 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.