接口、抽象、迭代器跟java的说法差不多,所以只作简单的解释,主要通过实例简单了解用法。
接口:通过它可以实现多重继承的功能。接口可以包含属性、方法、索引器和事件,但只可以对其进行定义而不能赋值。
简单声明的接口:
interface IPeople{
string Name{get;set;}
void show();
}
class Program : IPeople{
string name="";
public string Name{get{return name;} set{name=value;}}
public show(){Console.Write("Name:"+Name);}
}
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>(T[] items, T item){//创建泛型方法
}
}
//调用泛型方法
int i = Manager.Mana<int>(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);
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。