Sha*_*yna 3 c# constructor operators
在C#中创建一个字符串时,你string foo = "bar";要将字符串作为一个类,并使用=运算符将值"bar"传递给类.怎么做的?你能在自己的班上做这件事吗?
我知道这在C++中是可行的.
class someClass {
public:
someClass(int someInt) {
// Do Stuff
}
};
int main() {
someClass classInst = 123;
}
Run Code Online (Sandbox Code Playgroud)
但是C#会等同于什么?
这个问题分为两部分:
字符串文字
表达式"bar"已经是类型的值string.这里的赋值运算符只是复制引用,就像其他任何东西一样.字符串文字可以在可能的情况下创建字符串对象(但是重用,所以如果你在循环中有代码,那么只有一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果目标类型的new功能在C#8中传递,您将能够编写:
SomeClass x = new(123);
Run Code Online (Sandbox Code Playgroud)
...所以你至少可以在那里保存复制品,即使是田地也是如此.
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |