C# 我可以使用=运算符指定构造函数值吗?
在C#中生成字符串时,您需要执行C# 我可以使用=运算符指定构造函数值吗?,c#,constructor,operators,C#,Constructor,Operators,在C#中生成字符串时,您需要执行string foo=“bar”字符串是一个类,并且使用=运算符将值“bar”传递给该类。那是怎么做到的?你能在自己班上做这个吗 我知道在C++中是可行的。 class someClass { public: someClass(int someInt) { // Do Stuff } }; int main() { someClass classInst = 123; } 但C#等价物是什么 这个问题有两个部分:
string foo=“bar”代码>字符串是一个类,并且使用=
运算符将值“bar”传递给该类。那是怎么做到的?你能在自己班上做这个吗
<>我知道在C++中是可行的。
class someClass {
public:
someClass(int someInt) {
// Do Stuff
}
};
int main() {
someClass classInst = 123;
}
但C#等价物是什么 这个问题有两个部分:
- 字符串文字如何工作
- 如何为自己的班级做同样的事情
字符串文本
表达式“bar”
已经是字符串类型的值。这里的赋值运算符只是复制引用,就像它复制其他任何对象一样。字符串文字导致尽可能创建字符串对象(但重复使用,因此如果循环中有该代码,则只有一个String
对象)。关于FormattableString
,插值字符串文本有一些微妙之处,但出于本问题的目的,我将忽略这一点
创建自己的文本式语法
不能让赋值运算符直接隐式调用构造函数。可以添加从int
到SomeClass
的隐式转换,但我通常不鼓励这样做
这里有一个完整的例子,以防你真的想这么做,但它确实不是惯用语。例如,当您进行隐式转换时,您就更难对重载解析进行推理,而任何阅读您的代码的人都必须知道存在用户定义的隐式转换
using System;
class SomeClass
{
public int Value { get; }
public SomeClass(int value) => Value = value;
public static implicit operator SomeClass(int value) =>
new SomeClass(value);
}
public class Program
{
static void Main()
{
SomeClass x = 123;
Console.WriteLine(x.Value);
}
}
请注意,如果该功能在C#8中通过,您将能够编写:
SomeClass x = new(123);
。。。因此,您至少应该将复制保存在那里,即使对于字段也是如此。您可以定义两种类型之间的隐式转换:int
和SomeClass
,如下所示:
// User-defined conversion from SomeClass to int
public static implicit operator int(SomeClass someClass)
{
return someClass.SomeInt;
}
// User-defined conversion from int to SomeClass
public static implicit operator SomeClass(int someInt)
{
return new SomeClass(someInt);
}
这些方法应该在SomeClass
声明中定义
有关隐式转换的更多信息,请检查此项