C# 如何使此参数访问语法成为可能?
有没有办法在C#中做到这一点?我不希望每次需要访问值时都必须说sc.Value。使用转换:C# 如何使此参数访问语法成为可能?,c#,C#,有没有办法在C#中做到这一点?我不希望每次需要访问值时都必须说sc.Value。使用转换: 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; 但是,您应该研究一下。您
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;
但是,您应该研究一下。您可以通过包含从SampleClass到int的隐式转换来实现:
public class SampleClass {
public int value;
public SampleClass(int v)
{ value = v; }
public static implicit operator int (SampleClass c)
{
return c.value;
}
}
。。。但我强烈建议你不要这样做,或者至少你事先要仔细考虑。隐式转换使得以各种方式对语言进行推理变得更加困难(例如,考虑重载解析之类的事情)
非常非常偶尔引入隐式转换是一个好主意-例如LINQ to XML在字符串到XNamespace
和字符串到XName
转换中使用它-但我不会在这里这样做只是为了避免使用.Value
进行显式转换(只需在运算符转换中将implicit
更改为explicit
)稍微合理一点,因为至少这样可以清楚地知道调用代码中发生了什么。。。但在这一点上,转换为int
和使用.Value
在源代码大小上并没有太大区别
(正如其他地方所建议的,不要将字段公开,而是使用属性。)看一看。您需要为int重载隐式强制转换运算符。是的,这是可能的。您需要为SampleClass实现隐式: 这是:
public static implicit operator int(SampleClass s)
{
return s.value;
}
很抱歉这么说,但这将是非常糟糕的编码风格,对于不同的人来说很难理解!我很惭愧地承认我从来没有听说过隐式关键字。Jay:你只会在自定义对象上提供强制转换操作时遇到它,所以你不会经常被它绊倒。然而,您可能每天都会使用
隐式运算符的行为。实际上,我对此表示怀疑。我只能想到几个用户定义的隐式转换运算符的示例。隐式转换是语言本身的一部分(并不是在类型上真正定义的,例如,int
到long
)并不完全相同。我指的是隐式转换的概念,无论是用户定义的还是整数类型。一个例子是linqtoxml中的string
到XName
。
public class SampleClass
{
public int Value;
public SampleClass(int v)
{
Value = v;
}
public static implicit operator int(SampleClass d)
{
return d.Value;
}
}