C#:study(2)--运算符重载&&理解static

  • @理解static
    //static变量
    static成员不能通过对象实例来访问,它必须通过类名来访问。实质上,被声明为static的变量是全局变量。当声明类的对象时,不用拷贝static变量,而是类的所有实例共享一个static变量。static变量在类被装载时初始化。如果没有明确的初始化值,数值类型将被初始化为0,对象引用初始化为空,bool类型变量初始化为false。因此static变量总有一个值。
    //static方法
    static方法不用创建任何对象,只用类名就可以调用。static方法不能引用this。static方法只能直接调用其它static方法,原因是实例方法作用于类中的特定实例,但static方法不是。static方法只能直接访问static数据,它不能使用实例变量,原因是它不作用于类的实例。

  • @运算符重载
    不能为非自定义的类重载任何C#运算符,例如,不能为int和string重新定义+。运算符的参数不能使用ref和out来修饰。一般形式为:
    //重载一元运算符的普通形式
    public static ret-type operator op(param-type operand)
    {
    //operation
    }
    //重载二元运算符的普通形式
    public static ret-type operator op(param-type operand1,param-type operand2)
    {
    //operation
    }

            对于重载关系运算符,有一条重要的限制:重载必须成对。运算符对有:==and!=、<and>、=and>=。注意:如果你重载了==and!=运算符,那么你通常需要重载Object.Equals()和Object.GetHashCode()。
            对重载运算符有一些约束:不能改变预算法的优先级;不能改变一个运算符需要的操作数的个数,即使可以选择忽略某个操作数;有些运算符不能重载。最重要的是,不要重载赋值运算符,包括复合赋值运算符,如+=。下面的这些也不能被重载:
    && || [] () new is sizeof typeof ? -> . =
            最后一点:true和false两个关键字可以用作为重载目的的一元运算符。这些运算符重载后可以让用户判断逻辑值是真是假,或者用于实现三状态布尔逻辑:真、假或都不是。

  • @protected
    一个保护成员在类的层次中作为公有的成员对待,但在类的层次图外被认为是私有成员。

posted @ 2005-08-18 18:36  zhh007's Bolg  阅读(538)  评论(0编辑  收藏  举报