zoukankan      html  css  js  c++  java
  • C# 高级编程(笔记2)

    第四章

    1.接口

        public interface ITty
        {
            void Put();
        }

      a.一般情况下,接口只能包含方法、属性、索引器和事件的声明。不允许提供接口中任何成员的实现方式,只声明没有实现。

      b.不能有构造函数,接口中的成员不能有访问修饰符,因为接口本来就是公共的(public),

      c.只要一个类继承了接口,它就得为接口中的所有方法提供实现

    2.隐藏方法

      如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为virtual 和 override,派生类方法就会隐藏基类方法。在大多数清况下是要重写方法,而不是隐藏方法,因为隐藏方法会造成对于给定类的实例调用错误方法的危险。

        public class HisBaseC1ass
        {
            public String MyGroovyMeth()
            {
                return("Base Class");
            }
        }
    
        public class MyDerivedC1ass : HisBaseC1ass
        {
            public String MyGroovyMeth()
            {
                return ("My Derived C1ass");
            }
        }
        
        MyDerivedC1ass derived = new MyDerivedC1ass();
        Console.WriteLine( derived.MyGroovyMeth());//输出为“My Derived C1ass”
        //调用子类自己的,并不是调用从父类中继承下来的,即子类中覆盖了父类中的方法,正确明了的写法是用关键字new,
        //上面的写法,编译器会认为是隐式的覆盖
        
        public class MyDerivedC1ass : HisBaseC1ass
        {
            public new String MyGroovyMeth()
            {
                return ("My Derived C1ass");
            }
        }

    3.抽象类

        public abstract class AbstrTty
        {
            public void Get()
            {
            }
    
            public abstract void Push();【没有方法体】
        }

    a.该类不能被实例化,该类中除了可以和其他普通类一样,声明相关方法,属性等之外,还可以声明抽象方法,抽象方法没有方法体,派生类必须用override来重写其继承下来的抽象方法。

    b.抽象方法与虚方法的区别

     1)父类可以只声明虚方法,不提供实现;也可以提供实现【注意:都有方法体】

          public class Animal
          {
              public virtual void Sleep(){console.writeline(...);}//提供了实现
              public virtual void Eat(){}//没有提供实现
          }

     2)子类中必须用override来重写继承下来的所有抽象方法;对于虚方法,可以用override来重写,也可以不必重写

    4.定义和实现接口

        public interface IBankAccount
        {
            void PayIn();
            void Withdraw();
        }
        
        public class A: IBankAccount
        {
            void PayIn(){...}
            void Withdraw(){...}
        }
    
        public class B: IBankAccount
        {
            void PayIn(){...}
            void Withdraw(){...}
        }

    IBankAcoount a = neW A();
        IBankAccount b = neW B();

    //重要的是a,b这两个接口类型变量的声明形式,这表示它们可以指向实现这个接口的任何类的任何实例。这样得到的a,b只能访问类A,类
    B中从IBankAcoount接口中继承下来的所有方法,但如果类A,类B中还包括了它们自己另外定义的成员时,a,b是不能访问到的
    
    

    5.派生的接口
       接口可以彼此继承,C#中接口可以多继承

      public interfaCe ITransferBankACcount: IBankAccount
      {
          bool TransferTo(IBankACcount destinatio, decima amount);
      }





    //
    因为ITransferBankACcount派生自IBankAccount,所以它拥有IBankAccount的所有成员和它自己的成员。这表示派生自ITransferBankACcount的任何类都必须实现IBankAccount的所有方法以及在ITransferBankAccomt中定义的新方法TransferTo
    
    
  • 相关阅读:
    使用JS模拟锚点跳转
    js如何获取url参数
    k64 datasheet学习笔记52---Universal Asynchronous Receiver/Transmitter (UART)
    k64 datasheet学习笔记11---Port Control and Interrupts (PORT)
    k64 datasheet学习笔记10---Signal Multiplexing and Signal Descriptions
    k64 datasheet学习笔记50---GPIO
    k64 datasheet学习笔记4---Clock distribution
    k64 datasheet学习笔记3---Chip Configuration之Human machine interfaces
    k64 datasheet学习笔记3---Chip Configuration之Communication interfaces
    k64 datasheet学习笔记3---Chip Configuration之Times
  • 原文地址:https://www.cnblogs.com/notebook2011/p/2969414.html
Copyright © 2011-2022 走看看