如何使这个参数访问语法成为可能?

时间:2011-03-10 20:40:16

标签: c#

public class SampleClass {
     public int value;

     public SampleClass(int v)
     { value = v; }
}

// i want to access value like this
SampleClass sc = new SampleClass(5);

int i = sc;

有没有办法在C#中执行此操作?每次我需要访问该值时,我都不想说sc.Value。

4 个答案:

答案 0 :(得分:10)

使用implicit转换:

public class SampleClass {
     public int value;

     public SampleClass(int v)
     { value = v; }

     public static implicit operator int (SampleClass c)
     {
       return c.value;
     }
}

然而,你应该研究properties

答案 1 :(得分:2)

可以通过包含从SampleClass到int的隐式转换来实现它:

public static implicit operator int(SampleClass s)
{
    return s.value;
}

...但我强烈建议您不要这样做,或至少事先认真考虑。隐式转换使得以各种方式更难以推断语言(例如,考虑重载解析等)。

非常偶尔引入隐式转换是个好主意 - 例如LINQ to XML通过字符串XNamespace和字符串转换为XName来充分利用它 - 但我不会't 这里只是为了避免使用.Value

稍微更合理地进行显式转换(仅在运算符转换中将implicit更改为explicit)至少清楚地说明调用代码中发生了什么......但是在这一点上,使用int和使用.Value之间的源大小确实没有太大差异。

(正如其他地方所建议的,使字段公开 - 改为使用属性。)

答案 2 :(得分:1)

看看this。您需要为int。

重载隐式转换运算符

答案 3 :(得分:0)

是的,这是可能的。您需要为SampleClass实现隐式: 这是:

public class SampleClass
{
  public int Value;
  public SampleClass(int v)
  {
    Value = v;
  }

  public static implicit operator int(SampleClass d)
  {
    return d.Value;
  }
}