社区
C#
帖子详情
C#中,“实现”是指什么
zzmdegm
2006-10-25 12:31:56
接口中只能定义方法,属性,事件和委拖。
接口只提供定义而不提供实现,具体的实现在类中进行。
这里所说的“实现”是指的什么啊
...全文
287
6
打赏
收藏
C#中,“实现”是指什么
接口中只能定义方法,属性,事件和委拖。 接口只提供定义而不提供实现,具体的实现在类中进行。 这里所说的“实现”是指的什么啊
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oo312
2006-11-11
打赏
举报
回复
大哥好复杂啊 我看了好长时间有点迷糊了
zzmdegm
2006-10-26
打赏
举报
回复
谈谈C#中的接口
接口的相关陈述
1.一个接口定义了一个契约。
2.接口可以包容方法、C#属性、事件、以及索引器。
3.在一个接口声明中,我们可以声明零个或者多个成员。
4.所有接口成员的默认访问类型都是public。
5.如果在接口成员声明中包括了任何修饰符,那么会产生一个编译器错误。
6.与一个非抽象类类似,一个抽象类必须提供接口中所有成员的实现,只要这些成员在这个类的基类中出现过。
接口的理解
1. 面向接口编程利用OO的一个基本性质——多态,相同方法不同表现。可以这样想一下,client编写自己程序的时候,如果直接面向一个具体类写程序,那这个程序有个风吹草动的,那client就要受到影响,但如果面向一个接口就不同了,某个具体类变了,只知接口,不知具体类的client就可以完全不动。 都说上层领导比较好当,因为可以干的事通常对老百姓来说是虚的,越虚就越不容易错。
这个道理在OO中也是适用的。
2. 换个视角看,面向接口编程反映OO的另一个方面——封装,接口将具体实现封装了起来,可以不影响客户的情况下切换实现
3. 接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。OO的精髓,我以为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似调侃,实乃至理)。
空接口的使用
在接口使用的时候,空接口有2种情况:
1.类似于ObjectBuilder中的IBuilderPolicy,他们往往是做一个标记,表示需要某个功能.当然你也可以这么用,来表示你的类具有某个功能,实现了你的某个接口.
namespace Microsoft.Practices.ObjectBuilder
{
/// <summary>
/// Represents a builder policy interface. Since there are no fixed requirements
/// for policies, it acts as a marker interface from which to derive all other
/// policy interfaces.
/// </summary>
public interface IBuilderPolicy
{
}
}
2.你的接口继承了别的接口(非空),你的接口本身没有声明函数.这种情况一般是你不希望用户使用父接口作为参数类型,因为他们的用途可能不同,此时就可以用空接口来实现.
interface Text
{
string getText();
}
interface SqlText : Text
{
}
可以看到,Text接口是用于返回一个字符串.而SqlText是一个空接口,它继承了Text接口.也就是说SqlText也是一种Text.但是我们可以知道,任何一个字符串不一定是Sql字符串,所以此时声明了一个SqlText接口来用于表名当前的字符串是一个Sql字符串.你的函数可以这样声明:
public void doQuery(SqlText sqlText)
而不是这样:
public void doQuery(Text text)
避免用户产生歧义的想法,一眼看去,就明白应该传入一个Sql字符串.
接口的成员为什么没有委托
我们都知道C#的接口是可以包含事件的,其实当我们看到事件的时候,很容易就会想到委托,委托是事件的基础,如果对委托和事件不是特别清楚的程序员就一定不会明白,为什么C#接口中可以包含事件而不能有委托呢。其实简单的说法就是委托也是类型,delegate关键字引入的是一个新的类型,所以一个C#接口无法包容一个委托并把它当作成员;而event关键字引入的是一个新的成员,因此事件可以归人接口。理解这点,我们要从C#接口的使命说起,C#接口是一个契约,规范了接口实现者的行为,而不是要有些什么。很简单,例如“党员”是个接口,它肯定有个动作是“为人民服务”,“某某党员”实现了“党员”这个接口,那么“某某党员”肯定也要“为人民服务”,至于你“某某党员”是否必须拥用“电脑”、“小孩”。那么“党员”这个接口中肯定不会有规定。这也就是接口的目的,规范了实现者的一些行为。所以C#接口的成员都是方法,不会有其它了。稍有c#常识的程序员都明白,c#中的属性,其实就是两个方法,一个Set方法,一个Get方法,同样事件和索引器也都是方法,请看下面的接口:
public interface IDrawingObject
{
event EventHandler OnDraw;
string Name
{
get;
set;
}
int this[int index]
{
get;
set;
}
void SetValue();
}
该接口包含了c#接口所能接纳的所有成员,事件,属性,索引器,方法。把该接口编译后,我们用MSIL Disassembler工具查看一下:
这下大家都明白了,其实属性Name对应于Get_Name(),Set_Name()这两个方法,事件OnDraw对应于add_OnDraw(),remove_OnDraw()这两个方法,索引器对应于get_Item(),set_Item()这两个方法。在看下面的委托和类的定义:
public delegate void TestEventDelegate(object sender, System.EventArgs e);
class TestClass
{
public void SetValue()
{ }
}
看到了吧,定义一个委托和定义一个类是没有什么区别的,都是定义了个新的类型。所以C#接口是不能有委托的,除非微软告诉我们C#接口中是可以定义类的。
liujia_0421
2006-10-25
打赏
举报
回复
举个很简单的例子,比如一个方法,在接口中只有一个声明,具体方法的实现,即方法中的具体代码,在具体的类中来实现 。
flaigd
2006-10-25
打赏
举报
回复
public void doSomething()
{}
接口只是定义一个方法但是不能有方法体
public void doSomething()
{
// 有方法体的就叫实现
Console.WriteLine();
}
Influence
2006-10-25
打赏
举报
回复
可参考
http://www.cnblogs.com/sifang2004/archive/2006/07/14/450565.html
Influence
2006-10-25
打赏
举报
回复
C#接口是一个契约,规范了接口实现者的行为,而不是要有些什么。例如“党员”是个接口,它肯定有个动作是“为人民服务”,“某某党员”实现了“党员”这个接口,那么“某某党员”肯定也要“为人民服务”,做实事。
C#
自定义控件库
C#
自定义控件库
C#
界面皮肤(带例子)
需要界面的朋友,共享一个今天下载的东西! 很好的界面美化!
C#
串口通信工具
博客对应的源文件代码,网址:http://blog.csdn.net/rehongchen/article/details/7851673 希望能对大家有所帮助。
纯
C#
实现
的mspaint增强版画图程序
纯
C#
实现
的mspaint增强版画图程序
C#
串口介绍以及简单串口通信程序设计和
实现
C#
串口介绍以及简单串口通信程序设计
实现
源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍 串行接口简称串口,也称串行通信接口或串行通讯接口(通常
指
COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用: 工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来
实现
!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃
指
示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接,
C#
代码
实现
:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }
C#
111,094
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章