在C#中创建一个字符串时,你要将string foo = "bar";
字符串作为一个类,而值" bar"使用=
运算符传递给类。怎么做的?你能在自己的班上做到这一点吗?
我知道这在C ++中是可行的。
class someClass {
public:
someClass(int someInt) {
// Do Stuff
}
};
int main() {
someClass classInst = 123;
}
但是C#会等同于什么?
答案 0 :(得分:8)
这个问题分为两部分:
字符串文字
表达式"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);
}
}
请注意,如果C#8中传递了target-typed new
功能,您就可以写下:
SomeClass x = new(123);
...所以你至少要在那里保存复制品,即使是田地。
答案 1 :(得分:1)
您可以在以下两种类型之间定义隐式转化:WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement e = driver.findElement(By.xpath(“//*[text()=’”+ “父母” +”’]”);
wait.until(ExpectedConditions.elememtToBeClickable(e));
e.click();
和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);
}
声明中定义。
有关隐式转换的详细信息,请检查此link。