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。
答案 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;
}
}