我最近在C#中发现了一个转换操作符。现在我知道我可以覆盖运算符以允许:
byte b1 = new Foo();
byte b2 = (byte) new Foo();
但是从Foo
消费者的角度来看,我不知道哪个更容易理解可以进行转换。我特别考虑过将要/将来必须维护我的代码的初级程序员(或者如果我在几天前看到这个,我会想到的。)
一方面隐式投射看起来有点奇怪。它看起来像分配不同的,不兼容的类型。并且IDE的intellisense不会告诉你有一种方法可以在没有编译器抱怨的情况下做到这一点。
另一方面,显式转换看起来像强制转换。好吧,这是告诉编译器的一种方式“我知道我在做什么,不要发牢骚”。但是,如果程序员无法访问Foo
的代码(或者不知道C#中存在转换运算符),那么如何才能执行转换并执行某些操作?
在哪种情况下首选哪种类型的铸件?还有第三种方式吗?
答案 0 :(得分:7)
如果Foo
显然是数字,并且转换正在扩大,则隐式转化对消费者有用。
如果转换正在缩小,那么运营商应该是明确的。
如果Foo
不是数字(并且Foo
确实不是数字),那么它不应该转换为数字类型。
实现一些其他方法或属性,这些方法或属性将执行将Foo
实例转换为数字类型的操作。该函数的名称应该为调用者赋予语义含义,描述返回的值以及为返回它而执行的任何操作。
您不应该避免编程语言的某些部分,因为读者可能无法理解。您应该使用简单的散文评论您的代码,以解释您的决定以及您制作它们的原因。解释如何最大限度地利用您的类型。
使用最适合您正在建模的信息系统的语言功能。谁知道,读者可能会学到一些东西。
答案 1 :(得分:1)
我认为,第二个在你的情况下更具可读性。两者之间的操作是相同的。
请注意,您也可以写:
var b2 = (byte) new Foo();
我认为,如果考虑可读性,那将是最好的。
如何? -
byte
一次。Foo
byte
并且该类型的b2是(byte)
醇>