有没有办法将参数传递给setter? 如何将字符串传递给以下setter? 如何使用新的字符串参数调用setter?
public string It
{
get{ { return it;}
set { it = value;}
}
非常感谢您。
有没有办法将参数传递给setter? 如何将字符串传递给以下setter? 如何使用新的字符串参数调用setter?
public string It
{
get{ { return it;}
set { it = value;}
}
设置器(setter)将根据您分配给属性的值作为其自己的“参数”获得value
:
foo.It = "xyz"; // Within the setter, the "value" variable will be "xyz"
如果您想使用额外的参数,您需要使用一个索引器:
public string this[string key]
{
get { /* Use key here */ }
set { /* Use key and value here */ }
}
那么你可以这样访问它:
foo["key"] = "newValue";
在C#中,您无法给索引器命名,也不能通过名称(除了COM之外,从C# 4开始)从其他语言使用命名索引器。
编辑:正如Colin所指出的那样,您应该小心使用索引器...不要仅将它们用作获取额外参数的方法,然后在getter中忽略它们。例如,像这样的做法是糟糕的:
// Bad code! Do not use!
private string fullName;
public string this[string firstName]
{
get { return fullName; }
set { fullName = firstName + " " + value; }
}
// Sample usage...
foo["Jon"] = "Skeet";
string name = foo["Bar"]; // name is now "Jon Skeet"
C#中属性不支持参数。
如果你需要额外的信息来正确使用 它
,推荐的解决方案是将setter实现为一个方法:
public void SetIt(string value, string moreInfo) {...}
It = "My String";
属性的 getter 和 setter 只是 string get_It()
和 void set_It(string value)
的语法糖。
通常,我们可以直接为任何属性分配值,例如:It = "";
struct PersonName {
public string Forename { get; set; }
public string Surname { get; set; }
public PersonName(string fn, string sn) {
Forename = fn;
Surname = sn;
}
}
class MyPerson {
public string Forename { get; set; }
public string Surname { get; set; }
public DateTime dob { get; set; }
...
public PersonName Fullname {
get { return Forename + " " + Surname; }
set {
Forename = value.Forename;
Surname = value.Surname;
}
}
}
...
public void main() {
MyPerson aPerson = new MyPerson;
aPerson.Fullname = new PersonName("Fred", "Bloggs");
}
个人而言,我认为这对于如此微小的事情来说有些过度了。此外,这也引出了一个问题 - 为什么名字
和姓氏
这一对不已经定义为适当的struct
(PersonName
)了呢?
这是C#属性的基础:
假设您创建了一个具有该属性的对象blah:
Blah blah = new Blah();
blah.It = "Hello World";
String hey = blah.It;