有没有办法在 C# 中使用访问器的参数
Is there a way to use parameters with accessors in c#
我非常喜欢 c# 中访问器的语法,但我需要在我的 setter 中为一些属性使用一些额外的值。
有什么方法可以做类似的事情吗?或者这种类型的语法是不可能的吗?
public class Accesssor{
public List<CustomObject> AccessorStuff {
get {
return AccessorStuff;
}
set (ExtraParameters????) => {
AccessorStuff.add(new CustomObject(value,ExtraParameters))
}
}
}
(我也发现这个很难搜索,因为我不知道它是否有确切的名称,所以如果我也能得到那条信息,我将不胜感激)
提前致谢。
您可以在 C#
中使用所谓的 indexer
public List<CustomObject> this[int index]
{
get { /* return the specified index here */ }
set { /* set the specified index to value here */ }
}
然后您可以使用
访问它
obj[5] = someValue;
var result = obj[0];
与方法完全一样,您可以在索引器中拥有任意数量(但至少一个)的任意类型的参数。您还可以重载索引器,即具有不同数量的参数或不同参数类型的不同版本。例如:
public List<CustomObject> this[string name]
{
...
}
public List<CustomObject> this[string name, bool caseSensitive]
{
...
}
但在任何情况下,索引都适用于 setter 以及 getter。除了属性,索引器不能被命名。如果你需要几个这样的带参数的 "properties" ,只需使用普通的旧方法即可。
public void SetProperty(Extra stuff...)
{
...
}
不,这是不可能的 - 如果我使用您的 属性,这不是我所期望的。当我使用 set
时,我希望更改 List
,而不是为其添加值。这通常是通过 class 方法实现的:
public void AddObject(CustomObjectType obj, ExtraParameters extraParameters) =>
AccessorStuff.Add(new CustomObject(obj, ExtraParameters));
我非常喜欢 c# 中访问器的语法,但我需要在我的 setter 中为一些属性使用一些额外的值。
有什么方法可以做类似的事情吗?或者这种类型的语法是不可能的吗?
public class Accesssor{
public List<CustomObject> AccessorStuff {
get {
return AccessorStuff;
}
set (ExtraParameters????) => {
AccessorStuff.add(new CustomObject(value,ExtraParameters))
}
}
}
(我也发现这个很难搜索,因为我不知道它是否有确切的名称,所以如果我也能得到那条信息,我将不胜感激)
提前致谢。
您可以在 C#
中使用所谓的 indexerpublic List<CustomObject> this[int index]
{
get { /* return the specified index here */ }
set { /* set the specified index to value here */ }
}
然后您可以使用
访问它obj[5] = someValue;
var result = obj[0];
与方法完全一样,您可以在索引器中拥有任意数量(但至少一个)的任意类型的参数。您还可以重载索引器,即具有不同数量的参数或不同参数类型的不同版本。例如:
public List<CustomObject> this[string name]
{
...
}
public List<CustomObject> this[string name, bool caseSensitive]
{
...
}
但在任何情况下,索引都适用于 setter 以及 getter。除了属性,索引器不能被命名。如果你需要几个这样的带参数的 "properties" ,只需使用普通的旧方法即可。
public void SetProperty(Extra stuff...)
{
...
}
不,这是不可能的 - 如果我使用您的 属性,这不是我所期望的。当我使用 set
时,我希望更改 List
,而不是为其添加值。这通常是通过 class 方法实现的:
public void AddObject(CustomObjectType obj, ExtraParameters extraParameters) =>
AccessorStuff.Add(new CustomObject(obj, ExtraParameters));