C#(3)-OOP(下)接口、抽象类、委托、事件

方法修饰符:

static

new

virtual

override

sealed

abstract

extern

 

C#方法的参数类型有五种类型:

值参数

引用参数(用ref修饰符修饰)

对象类型参数(传递地址)

输出参数(用out修饰符定义)

参数数组(用params修饰符修饰)

 

方法重载:指一个类有多个方法,名字相同,但方法的参数列表不一样。

 

实例成员和类成员

this关键字

 

继承与派生

base关键字:关键字this指类的实例自己,而base关键字指父类。作用有两个:

1.调用父类的构造函数

2.调用父类的方法

 

方法覆盖与多态性

方法覆盖(Override)是指在派生类中重写基类的方法。

多态性是指不同的对象收到相同的消息会产生不同的动作。

 

sealed修饰符

在C#中,sealed修饰符表示密封,用于类时,表示该类不能被继承;用于方法和属性,表示该方法或属性不能被重写。

1.不能和abstract同时使用;2.使用sealed修饰符的方法或属性必须是基类的相应的虚成员,和override关键字一起使用。

 

抽象类与接口

抽象方法只有声明,没有实现。

抽象类可以包含或不包含抽象方法,包含抽象方法的类必须定义成抽象类。

抽象类不能被实例化,可以被继承,但不能定义成sealed类。

继承抽象类的类必须实现抽象类的抽象方法,否则也必须定义成抽象类。

一个类实现某个接口,但没有实现该接口的所有方法,这个类必须定义成抽象类

抽象方法不能使用virtual修饰。

接口

一个接口定义一个协定,在某种程度上接口像一个抽象类,接口可以定义方法、属性、事件、和索引。但是不提供成员的实现,接口成员总是公有的,接口可以使用多重继承,一个接口继承一个或多个基接口。

接口可以由类实现。实现接口的标识符出现在类的基列表中。

1.实现接口的类都必须提供接口中所声明的抽象成员的定义,否则该类型必须定义为抽象类。

2.当一个类实现多个接口时,接口之间用逗号分隔。

3.类的基列表同时包含基类和接口时,列表中首先出现的是基类。

 

namespace Interface
{
    interface IControl
    {
        void Paint();
    }
    interface ITextBox : IControl
    {
        void SetText(String text);
    }
    interface IListBox : IControl
    {
        void SetItems(String[] items);
    }
    interface IComboBox : ITextBox, IListBox { }
    interface IDataBind
    {
        void bind();
    }
    class Control : IControl
    {
        public void Paint()
        {
            Console.WriteLine("运行了Paint");
        }
    }
    class EditBox : Control, ITextBox
    {
        public void SetText(string text)
        {
            Console.WriteLine("运行了SetText");
        }
        public void Bind()
        {
            Console.WriteLine("运行了Bind");

        }
        class Program
        {
            static void Main(string[] args)
            {
                EditBox e = new EditBox();
                e.Paint();
                e.SetText("abc");
                e.Bind();
                Console.ReadLine();
            }
        }
    }
}

 

委托:

委托就是一种包装方法调用的类型。就像类型一样,可以在方法之间传递委托实例,并且可以像方法一样调用委托实例。属于引用类型。它引用方法,引用方法的过程叫做绑定。委托主要用于.NET Framework中的事件处理程序和回调函数,所有委托都是从System.Delegate继承而来的,并且有一个调用列表,这是在调用委托时所执行的方法的一个链接列表。

namespace Delegate
{
    public delegate void GreetingDelegate(string name);
    class Program
    {
        private static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning," + name);
        }
        private static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好," + name);
        }
        //注意这个方法,它接受一个GreetingDelegate类型的方法作为参数
        private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }
        static void Main(string[] args)
        {
            GreetPeople("Jimmy Zhang", EnglishGreeting);
            GreetPeople("张子阳", ChineseGreeting);
            Console.ReadLine();
        }
    }
}

 

事件:

事件是对象发送的消息以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象叫做事件产生对象。捕获事件并对其做出响应的对象叫做事件接受对象。两者之间存在一个媒介,这个媒介就是委托。