C# interface的一点使用总结

1 一个类可以实现一个以上的接口;

2 类必须实现接口中的“所有”属性和方法;

3 属性和方法定义所采用的格式必须与接口定义所采用的格式完全相同。方法所采用的参数数目及参数类型必须与接口中的完全相同。方法的名称也必须相同。

接口之间的继承:接口的继承仅仅说明了接口之间的继承关系,派生的接口继承了父接口的成员说明,没有继承父接口的实现。private和internal类型的接口不允许继承。如果派生接口中准备重写父接口的方法,实现方式同类的继承成员的覆盖。

如果一个类实现了某个接口,即使父接口没有在类的基类表中列出,这个类也隐式地继承了接口的所有父接口。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Phoenix.test.DoData
{
        public interface IDataOperate
        {
            string Insert();
        }
      //类封装,接口作为成员字段,实现接口统一访问
      //工厂模式
        public class DataOperate
        {
            private IDataOperate iDataOperate;
                                             
            public DataOperate(string dataBaseName)
            {
                switch (dataBaseName)
                {
                    case "sql":
                        iDataOperate = new DoData.DoSql();//实例化为接口类 DoData.IDataOperate
                        break;
                    case "access":
                        iDataOperate = new DoData.DoAccess();//实例化为接口类DoData.IDataOperate
                        break;
                }
            }
            public string Insert() { return iDataOperate.Insert(); }
        }
                                          
         public class DoAccess : IDataOperate
        {
            public string Insert()
            {
                //实现ACCESS插入的代码;
                return "access";
            }
        }
        public class DoSql : IDataOperate
        {
            public string Insert()
            {
                //实现SQLServer插入的代码;
                return "sql";
            }
        }
                                       
    }

调用示例

using System;
using System.Collections;
using System.Collections.Generic;
using Phoenix.test.DoData;
namespace Phoenix.test
{
    class class2
    {
        public static void Main()
        {
            DataOperate dataOperate = new DataOperate("sql");    //实例化构造函数
            Console.WriteLine(dataOperate.Insert());
            Console.ReadKey();
        }
    }
}

当然这里处理你可以使用反射来创建相应的类.
在封装组件的时候,使用者在调用方法的时候,不需要知道究竟是用什么数据库对象,只需要调用接口来得到数据库处理方法就可以了。


转载地址:http://www.cnblogs.com/fire-phoenix/archive/2010/03/29/1700105.html