zoukankan      html  css  js  c++  java
  • .net 学习总结

    *强制类型转换与as类型转换的区别:当类型转换非法时,强制类型转换将抛出一个System.InvalidCastException异常, 而as不会抛出异常,它返回一个null值。

    *类的静态成员属于类所有,不必生成实例就可以访问,它是在载入包含类的应用程序时创建的,但静态方法不能访问类的实例变量和方法。通常,静态变量是在定义时就赋初始值的。
    类的实例成员属于类的实例所有,不创建实例对象就无法对其进行访问,实例成员可以访问类的静态成员和其它实例成员。

    *常量其值是在编译时设定的,必须是数值文字。默认状态下常量是静态的。例:
    class A
    {
      public const double pi = 3.1415;
    }
    常量是编译时就确定的值。

    只读字段是在运行才能确定的值。比如运行时才能确定的屏幕分辨率。
    只读字段只能在类的构造函数中赋值。
    静态只读字段:
    class A
    {
      public static readonly int ScreenWidth;  //静态只读字段
      static A()   //静态构造函数
      {
        ScreenWidth = 1024;  //在静态构造函数中初始化
      }
    }

    *关键字ref和out用于指定用引用方式传递方法的参数。
    它们的区别是:ref参数必须初始化,而out参数不需要初始化。所以在方法处理代码依赖参数的
    初始化值时使用ref,不依赖初始化值时使用out。
    对out参数即使在传递前对其进行了初始化,其值也不会传递到方法处理函数内部。传递时系统
    会将其设为未初始化。所以在方法内部必须对out参数进行初始化。

    *方法的覆盖:指派生类覆盖基类的同名方法

    有二种方法
    1)第一种是在派生类要覆盖的方法前面加new修饰,而基类不需要作任何改动。
    这种方法的缺点是不能实现多态。例:
         class A
      {
          public void Method()  //无需任何修饰
          {
            ...
          }  
      }

    class B: A   //从基类继承
    {
      new public void Method() //覆盖基类的同名方法
       {
         ...
      }
    }

    class TestClass
    {
       A Instance = new B();
          Instance.Method();  //这时将调用类A的Method方法,而不是类B的Method方法
    }

    2)第二种是在派生类要覆盖的方法前面加override修饰,而基类的同名方法前面加virtual修饰。
    这样就能实现多态,例:

      class A
      {
         virtual public void Method()   //基类定义虚方法
         {      //虚拟方法不能定义为private,因为private成员对派生类是无法访问的
          ...
         }
      }

      class B: A     //从基类继承
      {
        override public void Method()   //派生类覆盖基类的同名虚方法
        {
          ...
        }
      }

      class TestClass
      {
        protected void Test()
        {
           A Instance = new B();   //定义一个实例,类型为基类,从派生类创建
            //派生类总是能够向上转换为其基类
          Instance.Method();    //将调用派生类B的Method方法,而不是基类的,这就是多态
        }
      }

    说明:new修饰的方法覆盖不能实现多态的原因,是因为使用new时编译器只会实现早期绑定(early binding)。
    即调用的方法在编译时就决定了:编译器看到Instance.Method()而Instance的类是A,就会调用类A的Method()方法。
    override修饰的方法覆盖可以实现多态的原因,是因为实现了后期绑定(late binding)。
    使用override时强制编译器在运行时根据类的真正类型正确调用相应的方法,而不是在编译时。
    而基类的同名方法必须加virtual修饰。
    类的静态方法可能通过 类名.静态方法名 这种格式来调用,不能使用 实例名.静态方法名 这种方法调用。



     

  • 相关阅读:
    NodeJS NPM 镜像使用方法
    用for; while...do; do...while; 写出九九乘法表
    create-react-app创建的项目中registerServiceWorker.js文件的作用
    前端应该从哪些方面优化网站?
    JS基础整理面试题
    netcore实践:跨平台动态加载native组件
    iOS开发--Swift RAC响应式编程初探
    算法导论学习笔记 (页码:9 ~ 16)
    iOS开发-- 通过runtime kvc 移除导航栏下方的阴影效果线条
    iOS开发--面试
  • 原文地址:https://www.cnblogs.com/SFAN/p/2103520.html
Copyright © 2011-2022 走看看