C#面向对象技术——接口、抽象、密封、迭代器、分部类、泛型-创新互联
接口、抽象、迭代器跟java的说法差不多,所以只作简单的解释,主要通过实例简单了解用法。
创新互联2013年开创至今,先为通州等服务建站,通州等地企业,进行企业商务咨询服务。为通州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。接口:通过它可以实现多重继承的功能。接口可以包含属性、方法、索引器和事件,但只可以对其进行定义而不能赋值。
简单声明的接口:
interface IPeople{ string Name{get;set;} void show(); }
使用Program类实现接口:
class Program : IPeople{ string name=""; public string Name{get{return name;} set{name=value;}} public show(){Console.Write("Name:"+Name);} }
主程序,使用实例化Program对象:
Program pro = new Program();//实例化Program对象 IPeople ip = pro;//使用派生类对象实例化接口 ip.Name = "hello";//为派生类中的Name属性赋值 ip.show();//调用派生类中方法显示属性值
上例通过实例化的接口对象访问派生类中的属性和方法。另外,接口还可以多重继承,使用时通过( ,)分隔:
interface IPeople{ string Name{get;set;} } interface IMan : IPeople{ void sex(); } class Program :IPeople,IMan{ public void sex(){Console.Write("..."); } } //调用时: IMan man = pro; man.sex();
显式调用接口成员(类实现两个接口,两个接口有相同的成员时,作为区分使用):
interface ICal1{ int Add(); } interface ICal2{ int Add(); } class Calculate : ICal1,ICal2{ int ICal1.Add(){ //显式接口成员实现 int x = 10; int y = 20; return x+y; } int ICal2.Add(){ int x = 10; int y = 20; int z = 30; return x+y+z; } } //调用时 Calculate cal = new Calculate(); ICal1 cal1 = cal; Console.WriteLine(cal.Add());//同理可以使用接口继承类ICal2的对象实例化接口
*********
抽象类和抽象方法:
只要有一个方法声明为抽象方法,这个类也必须被声明为抽象类。抽象类不能被密封。
抽象类声明:
public abstract class Test{ public int i; public void method(); public abstract void abdMethod();//抽象方法 }
抽象类和抽象方法的使用:
public abstract class People{ private string name=""; public string Name{ get{return name;} set{name = value;} } public abstract void show();//抽象方法 } public class One :People{ //重写抽象类中输出信息的方法 public override void show(){Console.Write("...");} } //实现 One one = new One();//实例化派生类 People p = one;//使用派生类对象实例化抽象类 p.Name = "hello";//使用抽象类对象访问抽象类中的姓名 p.show();//使用抽象类对象调用派生类中的方法
**********
密封类和密封方法:(为避免滥用继承而提出来的)
密封类可以限制扩展性,如果密封了某个类,则其他类不能从该类中继承(所以抽象类不能被密封);同理,密封的成员也如此。
密封类的声明:
public sealed class SealedTest{}
密封方法:
密封方法只能用于对基类的虚方法进行实现,并提供具体的实现,所以,声明密封方法时,sealed修饰符和override修饰符同时使用。
public class Base{ public virtual void show(){//定义一个虚方法 Console.WriteLine("这是基类中的虚方法"); } } public sealed class Derive:Base{//从基类派生一个密封子类 //密封并重写基类中的虚方法show() public sealed override void show(){ base.show();//调用基类的虚方法 Console.WriteLine("这是密封类中重写后的方法"); } }
密封类和密封方法的使用:
public class People{ public virtual void show(){}//虚方法 } public sealed class Student{ private string name =""; public string Name{get{return name;} set{name = value;}} //密封并重写基类中的show() public sealed override void show(){ Console.WriteLine("NAME: "+Name); } } //调用 Student stu = new Student();//实例化密封类对象 stu.Name = "hello"; stu.show();
迭代器:
用于返回相同类型的值的有序序列的一段代码。迭代器代码使用yield return 语句依次返回每个元素,yield break语句将终止迭代。返回类型必须是IEnumerable或IEnumerator中的一种。
创建迭代器:
public class Banks : IEnumerable { string[] arr = { "item1", "item2", "item3", "item4" }; public IEnumerator GetEnumerator() { for (int i = 0; i < arr.Length; i++) { yield return arr[i]; } } } //调用 Banks banks = new Banks(); foreach (string str in banks) { richTextBox1.Text += str + "\n"; }
**********
分部类:(直接举例比较容易理解)
partial class Part{//分部类第一部分 public int add(int a, int b){return a+b;} } partial class Part{//分部类第二部分 public int sub(int a, int b){return a-b;} } //调用时。可以知道分部类其实各部分就是组成一个类 Part part = new Part(); part.add(1,2);part.sub(5,3);
********
泛型(和java的类似,所以只是举例):
public class Manager{ public static int Mana(T[] items, T item){//创建泛型方法 } } //调用泛型方法 int i = Manager.Mana (new int[]{1,2} , 2);
实例——利用接口实现选择不同的内容
interface ISelect{ void Speak(string str); } class Chinese :ISelect{ public void Speak("....."); } class Foreign :ISelect{ public void Speak("....."); }
实例——通过重写抽象方法实现多态性
class Animal{ public string Run(){return "can run!";} public abstract string Sound();//声明抽象方法 } class Dog : Animal{ public override string Sound(){ return "Wang!"; } } //该类通过多态性输出动物的相关行为信息 public static class AnimalClass{ public static string AnimalSound(Animal an){ return an.Sound(); } } //在程序中调用时 Dog dog = new Dog(); AnimalClass.AnimalSound(dog);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:C#面向对象技术——接口、抽象、密封、迭代器、分部类、泛型-创新互联
当前链接:http://scyanting.com/article/cdggcs.html