分享

C#的一些语言特性

 goldbomb 2007-04-07
 1. new和override区别
    override在子类中重写基类的方法;new在子类中为基类同名(virtual)方法添加一个新的版本,会保留基类的同名(virtual)方法。
    下面的例子详细的展示它们的区别:
public class BaseClass
{
    
public BaseClass()
    {
    }

    
public virtual void Test()
    {
        Console.WriteLine(
"Test() in BaseClass");
    }
}

public class DerivedClass1 : BaseClass
{
    
public override void Test()
    {
        Console.WriteLine(
"Test() in DerivedClass1");
        
base.Test();
    }
}

public class DerivedClass2 : BaseClass
{
    
public new void Test()
    {
        Console.WriteLine(
"Test() in DerivedClass2");
        
base.Test();
    }
}

class Program
{
    
static void Main(string[] args)
    {
        DerivedClass1 class1 
= new DerivedClass1();
        class1.Test();
        Console.WriteLine(
"-----------------------");
        DerivedClass2 class2 
= new DerivedClass2();
        class2.Test();
        Console.WriteLine(
"-----------------------");
        BaseClass baseclass;
        baseclass 
= class1 as BaseClass;
        baseclass.Test();
        Console.WriteLine(
"-----------------------");
        baseclass 
= class2 as BaseClass;
        baseclass.Test();
        Console.WriteLine(
"-----------------------");

        Console.ReadLine();
    }
}
    输出如下,可以看到使用new时,如果将实例转换为基类类型,调用的方法为基类的方法:
Test() in DerivedClass1
Test() in BaseClass
-----------------------
Test() in DerivedClass2
Test() in BaseClass
-----------------------
Test() in DerivedClass1
Test() in BaseClass
-----------------------
Test() in BaseClass
-----------------------
    如果基类的同名方法不给出new和override修饰符,.Net默认采用new的方式,编译时将产生一条警告信息。

    2. 关于static的构造函数
    static的构造函数将在第一次使用该类的地方被调用。例如第一次调用该类的静态方法、属性,或者第一次实例化该类的一个对象等。

    3. abstract, virtual
    abstract的类不能实例化,只能用于子类继承。
    abstract的方法隐式的就是一个virtual方法;abstract的方法子类必须实现;abstract方法只能有声明,不能包含实现。
    virtual方法提供给子类重写;可以包含实现。

    4. as和强制类型转换
    强制类型转换:MyClass myclass=(MyClass)obj; 使用as:MyClass myclass=obj as MyClass;
    区别在于,如果obj不能被转换成MyClass类型,强制类型转换会抛出异常,而使用as时不会有异常,只是转换结果(myclass变量)的值为null。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多