gpt4 book ai didi

c# - 为什么在变量之后不进行转换?

转载 作者:行者123 更新时间:2023-11-30 19:05:30 27 4
gpt4 key购买 nike

animal(Elephant).UseTrunk() 不是更合乎逻辑吗?这样您就不必像在 ((Elephant)animal).UseTrunk()

中那样用所有这些额外的括号使您的代码困惑

这是历史原因吗?它会干扰其他语法吗?还是我错过了其他东西?

我几乎对 C# 语法和语言的干净和纯粹怀有虔诚的敬意,但转换语法对我来说总是有点像害群之马。

附言。我确实知道 (animal as Elephant).UseTrunk(),但这不是问题 :) 除了它在理论上是一种解决方法 - 打破了语言干净和纯粹的想法。

最佳答案

((Elephant)animal).UseTrunk()来自 C++,C# 是从 C++ 派生的。

C++ 也有函数式语法 Elephant(animal).UseTrunk() ,但 C# 语言设计者决定不支持它。原因是它提供的好处很少,同时使名称解析的逻辑复杂化。设计良好的程序不应该大量使用类型转换,所以这不是问题。

您可以使用以下扩展方法来简化您的代码:

    public static T To<T> (this object @this)
{
return (T)@this;
}

您的示例变为 animal.To<Elephant>().UseTrunk()这与您建议的语法非常接近。

关于c# - 为什么在变量之后不进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20797060/

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