Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使此参数访问语法成为可能?_C# - Fatal编程技术网

C# 如何使此参数访问语法成为可能?

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; 但是,您应该研究一下。您

有没有办法在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;
但是,您应该研究一下。

您可以通过包含从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;
  }
}