文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c#接口...

c#接口...

时间:2010-08-19  来源:caianye

    抽象类往往是一系列派生类的基类,而接口的作用是将协定混入其它继承树。

    接口定义语法如下:

        [性质][访问修饰符] interface 接口名 [:基列表]

        { 接口主体 }

    interface IStorable

    {

        void Read();

        void Write(object);

    }

    接口的目的是定义类中该有的功能。接口中没有访问修饰符,隐含就是public,事实上,如果有的话,会产生编译错误。因为接口是要由其它类使用的协定。不能创建接口的实例,但我们可以实例化一个类来实现接口。

    public class Document : IStorable

    {

        public void Read() { … }

        public void Write(object obj) { … }

    }

    现在Document类负责提供IStorable方法的具体实现了。我们指定Document要实现IStorable,因此必须实现所有的IStorable方法,否则编译时会出错。

    类可以实现多个接口。

    interface ICompressible

    {

        void Compress();

        void Decompress();

    }

    public class Document : IStorable, ICompressible

    扩展接口:

    interface ILoggedCompressible : ICompressible

    {

        void LogSavedBytes();

    }

    组合接口:

    interface IStorableCompressible : IStorable, ILoggedCompressible

    {

        void LogOriginalSize();

    }

    接口与抽象类的比较:

    接口与抽象类非常相似。事实上,我们可以把IStorable的声明改成抽象类:

    abstract class Storable

    {

        abstract public void Read();

        abstract public void Write();

    }

    但是,假如我们从第三方厂商买了一个List类,我们要将其功能与Storable中指定的功能结合使用,会怎么样呢?C++中我们可以创建一个StorableList类,同时继承List和Storable。但C#中就不行了,因为C#不允许类多重继承。

    不过,C#允许我们实现多个接口,并从一个基类派生。这样,我们可以将Storable变成一个接口,然后从List类和IStorable继承。如下所示:

    public class StorableList : List, IStroable

    {

        //方法列表

       …………

    }

    重定义接口的实现:

    实现类可以自由地将任何或全部实现接口的方法标记为虚。派生类可以重定义或提供新的实现。

using System;

namespace overridingInterface
{
    interface IStorable
    {
        void Read();
        void Write();
    };

    public class Document : IStorable
    {
        public Document(string s)
        {
            Console.WriteLine("Creating document with: {0}", s);
        }

        //使Read为虚方法, 可以实现多态的效果
        public virtual void Read()
        {
            Console.WriteLine("Document Read Method for IStorable");
        }

        //不为虚, 不可以实现多态的效果
        public void Write()
        {
            Console.WriteLine("Document Write Method for IStorable");
        }
    };

    public class Note : Document
    {
       public Note(string s):base(s)
       {
           Console.WriteLine("Creating note with: {0}", s);
       }

       //重定义read方法
       public override void Read()
       {
           Console.WriteLine("Overriding the Read method for Note!");
       }

       //实现自己的Write方法
       public new void Write()
       {
           Console.WriteLine("Implementing the Write method for Note!");
       }
    };
}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载