C#基础知识整理:基础知识(8) 接口
前面接触了抽象类,它的特点是子类必须实现abstract修饰的方法。以及还有virtual修饰的方法,virtual修饰的方法子类可以重写也可以不重写而直接使用。但是由于C#也是单继承的,所以定义一个父类,然后继承来扩展一些类的时候,会遇到不合适的情况。因为我们程序员是用程序语言来描述世界的,所以我们的工程中组织类,命名类,写方法等,最好和现实世界相似,这样开发起来才不费劲,修改bug的时候就比较轻松。
比如,在一个工程中,用到了很多窗体,有些窗体需要对其关闭事件重新处理,有些需要对其改变大小事件处理。但是每写一个窗体时都要写一遍关闭事件或改变大小事件的方法,总是很烦的。这时可以用继承吗?
public class IControlAble1 { public event EventHandler OnCloseEvent;//关闭 public void Control_Close(object sender, EventArgs e) { if (OnCloseEvent != null) { OnCloseEvent(sender, e); } } } public class IControlAble2 { public event EventHandler OnSizeChangeEvent;//改变大小 public void Control_SizeChange(object sender, EventArgs e) { if (OnSizeChangeEvent != null) { OnSizeChangeEvent(sender, e); } } }
试想一下,每写一个窗体类,都要继承一次IControlAble1或IControlAble2总是感觉很奇怪的,因为这两个类不是窗体类。这时有一个东西可以实现,这就是接口。
接口,书上是这样说的,接口是一种行为准则。而且对于接口生活中也很常见,比如我们常说USB2.0接口,USB2.0就是一种准则,所有生产USB线的厂家并没有直接关系,但是大家都遵守USB2.0这个准则来生产,每根线的连接处,长宽高是多少,每根数据线怎么排... 都要遵守这个准则。这样大家生产出来的线就能通用。
对于程序来说,就好比不同的类具有相同的超类,而且都实现了超类的抽象方法。这样所有类都有了某种准则。但是C#中是单继承的,这样实现起来比较困难。于是C#中就有了接口的概念。看看接口的标准形式和特点:
/// <summary> /// 1、接口不允许public,private,interna、protected修饰,因为所有的接口都是公用的; /// 2、成员不带代码体; /// 3、接口不能定义字段成员; /// 4、不能用关键字static,virtual,abstract、sealed修饰 /// 5、一个类可以实现多个接口 /// </summary> interface IMyInterfaceAble { //方法、字段 int MyValue { get; set; } void Method1(); void Method2(); }
C#中对接口的命名一般是:I***able,I表示接口,Able后缀。所以接口可以看做:有...能力的。
这样可以解决上面的问题了。将两个类修改为接口,然后其他窗体类实现就可以了。
interface IControlAble1 { //没有代码体,并且不修饰 event EventHandler OnCloseEvent;//关闭 void Control_Close(object sender, EventArgs e); } interface IControlAble2 { event EventHandler OnSizeChangeEvent; void Control_SizeChange(object sender, EventArgs e); } public class MainForm : IControlAble1,IControlAble2//可以实现多个接口 { /* 窗体代码 */ public event EventHandler OnCloseEvent; public void Control_Close(object sender, EventArgs e) { Console.WriteLine("重写关闭事件。"); } public event EventHandler OnSizeChangeEvent; public void Control_SizeChange(object sender, EventArgs e) { Console.WriteLine("重写大小改变事件。"); } } public class ChildForm1 : IControlAble1 { /* * 窗体代码 */ public event EventHandler OnCloseEvent; public void Control_Close(object sender, EventArgs e) { Console.WriteLine("重写关闭事件。"); } } public class ChildForm2 : IControlAble2 { /* 窗体代码 */ public event EventHandler OnSizeChangeEvent; public void Control_SizeChange(object sender, EventArgs e) { Console.WriteLine("重写大小改变事件。"); } }
这样,代码写起来更方便了,而且不会漏写。
以上就是C#基础知识整理:基础知识(8) 接口的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan untuk Active Directory dengan C#. Di sini kita membincangkan pengenalan dan cara Active Directory berfungsi dalam C# bersama-sama dengan sintaks dan contoh.

Panduan untuk Pensirian C#. Di sini kita membincangkan pengenalan, langkah-langkah objek siri C#, kerja, dan contoh masing-masing.

Panduan untuk Penjana Nombor Rawak dalam C#. Di sini kita membincangkan cara Penjana Nombor Rawak berfungsi, konsep nombor pseudo-rawak dan selamat.

Panduan untuk Paparan Grid Data C#. Di sini kita membincangkan contoh cara paparan grid data boleh dimuatkan dan dieksport daripada pangkalan data SQL atau fail excel.

Panduan kepada Corak dalam C#. Di sini kita membincangkan pengenalan dan 3 jenis Corak teratas dalam C# bersama-sama dengan contoh dan pelaksanaan kodnya.

Panduan Nombor Perdana dalam C#. Di sini kita membincangkan pengenalan dan contoh nombor perdana dalam c# bersama dengan pelaksanaan kod.

Panduan untuk Faktorial dalam C#. Di sini kita membincangkan pengenalan kepada faktorial dalam c# bersama-sama dengan contoh dan pelaksanaan kod yang berbeza.

Perbezaan antara multithreading dan asynchronous adalah bahawa multithreading melaksanakan pelbagai benang pada masa yang sama, sementara secara tidak sengaja melakukan operasi tanpa menyekat benang semasa. Multithreading digunakan untuk tugas-tugas yang berintensifkan, sementara asynchronously digunakan untuk interaksi pengguna. Kelebihan multi-threading adalah untuk meningkatkan prestasi pengkomputeran, sementara kelebihan asynchronous adalah untuk tidak menghalang benang UI. Memilih multithreading atau asynchronous bergantung kepada sifat tugas: tugas-tugas intensif pengiraan menggunakan multithreading, tugas yang berinteraksi dengan sumber luaran dan perlu menyimpan respons UI menggunakan asynchronous.
