so true

心怀未来,开创未来!
随笔 - 160, 文章 - 0, 评论 - 40, 引用 - 0
数据加载中……

.NET零散笔记[3]

.NET中所有的基类都是System.Object。

C#中用is代替Java中instanceof关键字。

C#中typeof和Type.GetType函数等同。

C#中的特性,首先它是一个派生于System.Attribute的类,而且在类命名的时候,通常都以Attribute结尾。定义一个特性就是普通的定义一个类。使用特性时,用一对中括号包含一个该特性定义的实例,然后放在方法前、类前、字段前即可。如:
我们定义了一个RegistryKeyAttribute的特性,然后使用时就可以:
[RegistryKey(34,"Foo")]//注意在引用时可以省略Attribute,系统会为其自动添加上
public int foo;
然后就可以检测该类的该属性是否具有RegistryKeyAttribute特性了。
C#中使用特性主要是为了添加注释,并把注释的信息捆绑到类上,在运行的时候就可以通过反射的机制来得到这些注释信息了,这点可以类比于Java中的Annotation。

C#中,可以使用名字隐藏(name hiding)技术,该技术主要应用于当一个类实现了某个接口时,如果我们用该类的一个实例来“点”一下的话,那么应该可以看到被实现的这个接口中的所有内容,为了不让外界看到接口中的内容,那么可以使用该技术。该技术使用的具体方法是在实现接口中的方法时去掉public关键字,改用接口名字代替。例如:本来应该是public void run(){}现在改为void Runnable.run(){}使用这种办法可以解决“同时实现多个接口时,当不同接口中存在同样的函数时,产生的名字模糊问题”,比如A和B接口都有fun方法,那么在一个类同时实现A和B接口时,可以这样写代码:void A.fun(){...}
void B.fun(){...}而在使用时,可以这样((A)类的一个对象).fun();这样调用的就是对接口A中fun方法的实现。

在C#中可以定义基于普通数值类型的enum类型,例如
enum Test : int
{
 One=1;
 Two,
 Three
};

C#中的switch语句中不允许“贯行<fall-through>”,即当一个case情况满足时,如果该case没有break语句,那么就会自动执行下一个case对应的语句,在C#中把贯行给取消了,而在java中还是保留了贯行的。

C#中也可以定义运算符重载,对于普通运算符重载时,相对于一般的函数定义,我们只需要把“函数名”替换为“operator<某运算符>”即可,例如:public static String operator+ (String s1,String s2)。比较特殊的是定义强制类型转换运算符,它的定义形式如下:
public static implicit operator conv-type-out (conv-type-in operand)
public static explicit operator conv-type-out (conv-type-in operand)
这里的implicit指“不需要客户端显式的给出,它会自动进行”;explicit指的是“客户端必须显式的指出需要转换的类型”。例如:
public static implicit operator float (String s)
最后,还需要提醒注意的是,对于运算符重载,必须都定义为public static,这一点必须保证。

posted on 2008-03-26 22:06 so true 阅读(281) 评论(0)  编辑  收藏 所属分类: .NET


只有注册用户登录后才能发表评论。


网站导航: