在C#中创建一个字符串时,你要做字符串foo =“bar”; string是一个类,值“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);
}
}
请注意,如果target-typed new
功能在C#8中传递,您可以编写:
SomeClass x = new(123);
…所以你至少可以在那里保存复制品,即使是田地也是如此.