a以下那些说法是正确的为什么:
1.优先使用属性(Property)代替成员(Field)
2.优先使用is as代替强制转换
b.Enum class interface 默认的访问级别是什么
a. 1. 不对。属性就是属性,成员就是成员,如果是属性,就用属性,如果是成员,就用成员。本来就是不同的东西,这句话就跟“优先使用电饭煲代替热水器”一样毫无逻辑。
a. 2. 不对。说这句话的人的理由一定是所谓的”安全“,所谓的“不抛出异常”,但事实上有时候就是要检查转换并且抛出异常。只是在“有时候”显式转换不如as好用而已。不能一棒子打死。
b. 不能确定,看定义在哪里。不过你只要记住最小原则就可以了,所有的默认访问级别(无修饰符的)都是“当前情况下能做到的最小级别”。
a、
1. 正确。使用Field的性能回比Property强,但是,field不可以控制,在编程中,哪怕这个Property仅仅是一个field的代理(简单的实现get和set)也最好使用property,一来,便于今后的扩展(property的get与set才能进行控制),二来,很多数据绑定只支持Property而不支持field。
2. 正确。使用(type)var的形式强制转换的性能是最高的,但是在现在的编程里,这点性能的消耗是可以忽略不记的(如property的使用)。使用强制类型转换,如果类型安全固然是好(确认是类型安全的时候,还是推荐用这个方案),假如类型不安全,那就回抛出异常,此时,如果使用try-catch来处理,性能反而更差。使用as是一个安全的类型转换方式,假如类型不兼容,as将返回null,只是这个转换方式只支持引用类型,对于值类型无效。要对值类型进行转换,为了避免类型不兼容的问题,最好是先判断下对象类型是否兼容,此时就可以通过is来达到目的。事实上,即便是引用类型,先使用is判断后再使用强制转换或as转换,也性能要提升不少。
b、
enum、class、interface的默认访问级别?一般是internal(你可以添加一个新的类型,然后看先生成的代码是否有internal、public之类的,没有internal的标识,假如是外部类型(非嵌套类型),那么默认是internal,假如是内部类(嵌套类型,即rest类型,类型中的类型),默认是private。
a1.不对
Property和Field在使用上有相似之处,但在本质上属于完全不同的东西。从概念上讲有很大的区别。2者都有其适用的范围,要根据实际情况来使用。如果从扩展的角度来看,在使用了Field的地方如果需要的话很容易把它重构为Property。数据绑定只支持Property,只能说明在需要数据绑定的时候应该用Property,而不能说明任何应该优先使用Property。属性还不能作为out或ref参数传给方法呢...如果一定要谈属性的缺点可以举出好多好多。
a2.不对
用强制转换还是is as要看业务逻辑。如果从业务逻辑的角度讲被转换的对象“必须”是需要转换成的类型,就应该用强制转换,如果转换不成功则抛出异常,有助于在测试阶段发现bug,等这个bug消除,则永远不会转换不成功,也就不存在所谓的性能问题了。如果从业务逻辑的角度看被转换的对象“可能”是需要转换的类型就要用is as了。