gpt4 book ai didi

c# - 为什么 "as"运算符在 C# 中不使用隐式转换运算符?

转载 作者:可可西里 更新时间:2023-11-01 03:13:29 26 4
gpt4 key购买 nike

我在 C# 中定义了从/到某种类型的隐式字符串转换(伪代码):

public class MyType
{
public string Value { get; set; }

public static implicit operator MyType(string fromString)
{
return new MyType { Value = fromString };
}

public static implicit operator string(MyType myType)
{
return myType.Value;
}
}

在外部库代码的某处,MyType 的实例作为对象 参数传递给方法。该方法的一部分看起来像这样:

private void Foo(object value)
{
// ... code omitted
var bar = value as string // note that value is an instance of MyType at runtime
if(bar != null) // false, cast fails
{
// ... code omitted
}
}

为什么转换不使用隐式转换器?我认为这些的全部意义在于使转换和透明使用成为可能?

如果 MyType 有一个 explicit 转换器,这会起作用吗?如果是这样,(如何)我可以同时拥有两者?

顺便说一句,如果类型在编译时 已知,则转换肯定有效。这是因为运算符是 static 吗?有没有类似非静态转换运算符的东西?

附言实际上,我最感兴趣的是编译时行为和运行时行为之间的区别,所以我有一个后续问题:Why are implicit type conversion operators not dynamically usable at runtime in C#?

最佳答案

Why does the soft cast not use the implicit converter?

嗯,这基本上就是指定语言的方式。来自 C# 5 规范第 7.10.11 节:

If the compile-time type of E is not dynamic, the operation E as T produces the same result as

E is T ? (T)(E) : (T)null

except that E is only evaluated once.

[...]

Note that some conversions, such as user defined conversions, are not possible with the as operator and should instead be performed using cast expressions.

关于c# - 为什么 "as"运算符在 C# 中不使用隐式转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35508048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com