c# – 我可以使用=运算符指定构造函数值吗?

在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);

…所以你至少可以在那里保存复制品,即使是田地也是如此.

上一篇:为什么op-assign运算符在java中不安全?


下一篇:PHP – $variable = value1或value2