是否可以制作多参数属性?

时间:2014-01-17 16:29:17

标签: c#

有没有办法做这样的事情:

class blabla
{
   string[] a;
   string ciao(int row, string text)
   {
       set { a[row] = text;}
       get { return a[row;}
   }
}

(是的,我知道我最终可以制作自己的方法)

2 个答案:

答案 0 :(得分:6)

您可以做的最好的事情是使用索引属性this

class Foo
{
 string[] row;

 string this[int row]
 {
    set {a[row] = value;}
    get {return a[row];}
 }
}

然后,您可以使用[]运算符访问它:

Foo f;
f[1] = "hello";

不可能有一个行为方式的命名属性。

另外,从.NET开始,没有理由不能对属性进行参数化。如果查看PropertyInfo类,您可以看到属性只是一个get方法和一个set方法,两者都可以获取参数。实际上,这是索引属性的工作方式(以及属性)。只是C#没有通过语言公开这个功能。

答案 1 :(得分:1)

您可以创建索引器属性

public string this[int index]

重载你班级的[]操作符,允许你在[]之后和=

之间取一个参数

您可以更改索引参数的类型,但这可能会使调用者感到困惑。

http://msdn.microsoft.com/en-us/library/aa288464(v=vs.71).aspx

class blabla
{
   private string[] a;
   string this[int row]
   {
       set { a[row] = value;}
       get { return a[row;}
   }
}

语法有效,因此value的类型由重载运算符的返回类型指定。