C#面向对象技术——接口、抽象、密封、迭代器、分部类、泛型

发布时间:2020-05-27 11:30:13 作者:dongdong200514
来源:网络 阅读:699

接口、抽象、迭代器跟java的说法差不多,所以只作简单的解释,主要通过实例简单了解用法。

接口:通过它可以实现多重继承的功能。接口可以包含属性、方法、索引器和事件,但只可以对其进行定义而不能赋值。

简单声明的接口:

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>(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);


推荐阅读:
  1. C# 泛型
  2. final、内部类、抽象类、接口 总结

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

接口 抽象

上一篇:线下实体店打造私量流域的方法

下一篇:微软为什么要把服务器放在海底?

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》