C#接口-接口概述

C#不支持多重继承,但是客观世界出现多重继承的情况又比较多。为了避免传统的多重继承给程序带来的复杂性等问题,C# 提出了接口的概念。通过接口可以实现多重继承的功能。

接口是单纯对事物行为的描述。例如,电器都有“开”和“关”两个行为,开关的作用在于打开或关闭电器,而开关的形式也是不一样的。电灯、电视、电扇,电冰箱各自完成的开关的动作也是不一样的,但是所有的电器都必须具有开和关的功能,这是一个规定,在程序设计中,这个规定就是接口。

C#中接口的作用的什么?不是可以继承吗?为什么还要用借口?
抽象类或实体类,只能单一继承,接口可以多继承。子类只能有一个基类,但子类可以实现几乎无数个接口。

接口只包含行为定义,不能有任何具体的实现。可以把接口看成一种规范和标准,它可以约束类的行为,它规定了实现这个接口的类必须有的内容。C#不支持多重继承,但是它把这个功能交给接口来实现。类和类之间系统资源的调用方式是不一样,导致他们之间通信很困难。而接口可以屏蔽掉它们之间的差异,能使他们顺利通信。

在上面的电器例子中,可以定义一个接口,接口中有开和关两种方法,只是方法的声明不包括具体实现。电视、电冰箱等电脑类产品就必须遵守接口的规定,包括开和关的功能,具体实现各个不同的开关方法。

发布了932 篇原创文章 · 获赞 391 · 访问量 330万+
展开阅读全文

C# 接口 反射 奇怪的问题

05-10

1、定义一个接口,用于获取用户的功能点。因为有些项目中甲方有自己的权限平台,所以这里反接口开放出来。 public interface IUserFuns { List<string> GetFunCodes(string userID); } 2。我的系统中也自己做了一套授权功能。实现1中的接口 public List<string> GetFunCodes(string userID) { List<string> modules = new List<string>(); modules.Add("0000"); modules.Add("0001"); modules.Add("0002"); modules.Add("0003"); modules.Add("0004"); return modules; } } 这只是用来测试的。 3、 接口开放在配置文件里, <userFuns fileName="NewTest.exe" typeName="NewTest.BLL.UserFun"></userFuns> <!--<userFuns fileName="MvcApplication.dll" typeName="MvcApplication.BLL.UserFunction.BaseUserFun"></userFuns>--> 4、根据配置文件的信息,获取功能点权限 //获取类信息 动态调用 Assembly asb = Assembly.LoadFile(assName); object obj = asb.CreateInstance(section.TypeName); if (typeof(IUserFuns).IsInstanceOfType(obj)) { IUserFuns module = obj as IUserFuns; listCodes = module.GetFunCodes(userID); } assName是实现接口的文件的全路径名称 section.TypeName是实现接口的类的全名称,命名空间命+类名 5、问题:4中的判断,if (typeof(IUserFuns).IsInstanceOfType(obj)) 如果obj跟IUserFuns在同一个项目中typeof(IUserFuns).IsInstanceOfType(obj)就是false,如果obj跟IUserFuns不在同一个项目中,typeof(IUserFuns).IsInstanceOfType(obj)就是true,这是为什么? 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 鲸 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览