A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

C#中的接口和类有什么异同??求解释

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

3 个回复

正序浏览
这是我写的日记,您可以看下。
接口表示一组函数成员,但不实现这些函数成员(实现代码块用分号代替)。类和结构可以实现接口
接口的声明方式如下:
interface IMyIf { void Print();}
1不可为接口中的成员添加修饰符,接口中的成员的修饰符默认是public。其实这也是有道理的,因为接口中的成员就是被用来实现的。倘若不是共有的,又想在某些地方实现接口中的成员就会受到保护级别的限制。
2接口中的成员可以是:属性,方法,索引,事件。但不可以是字段。
3要想实现接口,必须在基类列表中列出接口名,必须实现接口中的每一个成员。
4按照惯例接口名首字母应该是大写的I。
5一个接口可以继承另一个接口。这时子接口就有了所有父接口的成员。
6一个接口可以继承多个接口的同时继承一个类。在基类列表中基类必须写在第一位。


让我们来看几个例子吧
class Program
    {
        static void Main(string[] args)
        {
            IMyIf m = new Chinese();  //把类对象的引用转化为接口类型来获取指向接口的引用
            m.Print();
            IShow s = new Chinese();
            s.Show();
            Console.ReadKey();
        }
    }
interface IMyIf         //接口名首字母为大写的I
{ void Print();}        //该方法的默认修饰符为public,不可以人为修改
interface IShow
{ void Show();}
    class Person {
        public void Swimming()
{ Console.WriteLine("person can swimming");}
    }
    class Chinese : Person, IMyIf, IShow  //基类列表中把基类写在最前面
    {                    //为每个接口中的每个成员提供实现代码
        public void Print() { Console.WriteLine("从接口IMyIf中继承来的"); }
        public void Show() { Console.WriteLine("从接口IShow中继承而来的"); }
   
}

当类继承的多个接口中的成员都有相同的返回值,函数名,参数。类可以只实现一个成员。如下代码是正确的
interface IIfc1 { void Print();}
    interface IIfc2 { void Print();}
    class MyClass : IIfc1, IIfc2
    {
        public void Print() { Console.WriteLine("共同的实现"); }
     }


如果非要给每个接口中的成员有一个实现可以用显示接口;如下类所示
interface IIfc1 { void Print();}
    interface IIfc2 { void Print();}
    class MyClass : IIfc1, IIfc2
    {
    void IIfc1.Print() { Console.WriteLine("IIfc1接口的实现"); }
    void IIfc2.Print() { Console.WriteLine("IIfc2接口的实现"); }
     }

当然实现接口的类还可以从它的基类继承实现的代码,如下所示
interface IShow { void Print();}
class Person
{ public void Print()
{ Console.WriteLine("通过Person类中的方法而实现"); }
}
class Student : Person, IShow
{ }
回复 使用道具 举报
我说简单点
   接口是负责功能的定义
   类是负责功能的具体实现
其余细节自己好好看看《C#本质论》这本书

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1 赞一个!

查看全部评分

回复 使用道具 举报
都是引用类型.
接口实质上是功能说明书,说明有什么属性和功能(属性和方法)
接口理论上是继承者的父类,因此它可以作为实现类的引用,来封装类的复杂实现。
用接口引用 指向 new 的实例,则该引用只呈现接口中约定的属性和方法(封装)
接口可以理解为是纯抽象的类。它与类的关系好比自动洗衣机的说明书 和自动洗衣机的关系。
说明书里描述了自动加水、自动洗衣、自动脱水等功能方法,也有环保、节能、省水等特(属性)。
但是你不能用这个说明书来洗衣服吧? 你得用这些功能的实现者--洗衣机来洗衣服。
虽然是全自动洗衣机,但是它使用就很简单,1 打开盖子,放入衣服; 2 按下“开始”开关
主人完全不用关心洗衣机的内部是如何的复杂(封装)。
体现在代码上就是:
1 约定全自动洗衣机的功能,定义一个接口说明书
public Iterface IWashMac{
    void 放入衣服();
    void 开始洗衣();
}
public class Wasmac: IWashMac{
    public void 放入衣服(){
       //...
    }
    public void 开始洗衣(){
      //...
     }
}

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马