接口(学习中笔记)

接口可以包含方法、属性、事件和索引器,但不能是常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。
interface IMyExample {  string this[int index]{get;set;}  event
EventHandler Even;  void Find(int value);  string Point{get;set;} }
public delegate void EventHandler(object sender,Event e);

类和结构可以多重实例化接口。

1、C#中的接口是独立于类来定义的,这与C++模型是对立的,在C++中接口实际上就是抽象基类。 2、接口和类都可以继承多个接口
3、类可以继承一个基类,接口根本不能继承类。
4、一个接口定义一个只有抽象成员的引用类型。C#中一个接口实际所做的,仅仅只存在着方法标志,但根本就没有执行代码。这就暗示了不能实例化一个接口,只能实例化一个派生自该接口的对象。

接口是一组包含了函数型方法的数据结构。 类的基列表同时包含基类和接口时,列表中首先出现的是基类。

接口成员默认访问方式是Public。接口成员定义不能包含任何修饰符,比如成员定义前不能加abstract,public,protected,internal,private,virtual,override或static修饰符。

对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的,如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员,但由于接口支持多继承,在多继承中,如果两个父接口含有同名的成员,这就产生了二义性(这也正是C#中取消了类的多继承机制的原因之一),这时需要尽心显示的定义;

接口作为参数示例:


//接口做为参数传递,传递的是实现了接口的对象;

//接口作为类型返回,返回的是实现了接口的对象。

//定义接口
public interface IPerson
{
void Say();
}

public class ManPerson:IPerson
{
public void Say()
{
Console.WriteLine("男人说");
}
}

public class WomanPerson : IPerson
{
public void Say()
{
Console.WriteLine("女人说");
}
}

//
public class Person
{
public void Get(IPerson iPerson)
{
iPerson.Say();
}
}

class Program
{
static void Main(string[] args)
{
ManPerson m = new ManPerson();
WomanPerson w = new WomanPerson();
Person p = new Person();

p.Get(m);
p.Get(w);
Console.ReadKey();
}
}


//如果类实现了某个接口,类也隐式地继承了该接口的所有父接口,不管这些父类接口有没有在类定义的基类表中列出。
using System
interface IControl
{
void Paint();
}

interface ITextBox:IControl
{
void SetText(string text);
}

interface IListBox:IControl
{
void SetItems(string[] items);
}

interface IComboBox:ITextBox,IListBox
{
//方法
}
public class TextBox:IComboBox
{
//实现IComboBox接口方法以及父接口的方法
}

这里,接口IcomboBox继承了ITextBox和IListBox,类TextBox不仅实现了接口ITestBox,还实现了接口ITextBox的父接口IControl。

接口(学习中笔记)

时间: 2024-10-03 22:15:29

接口(学习中笔记)的相关文章

OpenCV(C++接口)学习笔记4-Mat::operator = 的陷阱

当我们想要将一个Mat对象的数据复制给另一个Mat对象时,应该怎么做呢? 我们发现,OpenCV提供了重载运算符Mat::operator = ,那么,是否按照下列语句就可以轻松完成对象的赋值呢? Mat a; Mat b = a; 答案是否定的! 我们可以从reference manual 中看到: Mat::operator = Provides matrix assignment operators. C++: Mat& Mat::operator=(const Mat& m) Pa

OpenCV(C++接口)学习笔记2-像素级的图像操作

1.通过成员函数at(int y, int x)访问 这种方法需要知道像素保存的格式. (1) 这是为模板类型的函数,因为一个函数的返回类型只有在运行时才会知道. (2)这个函数返回的是一个向量即Vector,故有下标的操作. image.at<uchar>(j,i)= 255; 在单通道图像中,采用以上语句可以获取图像(i,j)处的灰度值(注:先行后列,一般用j表示行(rows),i表示列(cols)).如果是灰度图像的话,只需要更改一个数据就可以了.如果是rgb图像的话,就要用"

OpenCV(C++接口)学习笔记1-图像的读取、显示、保存

OpenCV在2.0版本之后添加了C++接口函数,之前学习的都是C语言的接口函数,现在OpenCV已经发展到2.4.9版本了,所以决定学习C++接口函数,跟上节奏. 1.创建图像 cv::Mat image; 采用类cv::Mat来定义图像变量或矩阵变量. 当然你也可以指定图像的大小: cv::Mat img(240,320,CV_8U,cv::Scalar(100)); 参数CV_8U中的U代表unsigned,而S代表signed.对于三通道彩色图像可以用CV_8UC3.你也可以声明16或3

java学习中,接口的使用(重要,常用知识点)(java 学习中的小记录)

java学习中,接口的使用(重要,常用知识点)(java 学习中的小记录)作者:王可利(Star·星星) 接口(功能:用来添加拓展功能的) 例子:铅笔.带橡皮檫的铅笔. 两个功能:     1.写字......> 铅笔     2.擦字......> 橡皮擦 想法:定义一个铅笔类,定义一个橡皮擦类,定义一个带橡皮擦的铅笔类继承 铅笔类和橡皮擦类 但是java是单继承的.于是就有了解决的方法:接口(可以添加拓展功能) 如:一个铅笔类,给它添加一个接口给它一个拓展类(橡皮擦类) 接口的定义模式 用

.net接口学习笔记

1.接口的声明 接口的声明不能包含:数据成员,静态变量:只能包含如下类型的静态成员函数的声明:方法,属性,事件,索引器.声明中不能包含任何实现的代码,而在每个成员成名的主体后,必须使用分号. 接口声明可以有任何的修饰符public.protect.internl或private. 接口的成员是隐式的public,不允许任何访问修饰符,包括public. 1 Public Interface IMyInterface 2 { 3 //接口成员是隐式的public,并且只有声明 4 int Meth

Docker学习教程笔记整合(完整)

Docker学习教程笔记整合(完整) 本文主要是整理了DockerOne组织翻译的Flux7的Docker入门教程,通过markdown记录,方便离线学习.原文地址,http://dockone.io/article/101. 文中一些链接可能会跳转国外的网站,如果没有插件或开VPN的朋友,可以尝试修改一下Hosts文件,如何修改Hosts文件.或者使用XXNet插件,如何使用XXnet 介绍 Docker是一个新的容器化的技术,它轻巧,且易移植,号称"build once, configure

Python学习手册笔记

之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书配套答案请到http://www.hzbook.com/Books/4572.html下载,简单注册即可. 第三章 如何运行程序 impor

[SQLServer]学习总结笔记(基本涵盖Sql的所有操作)

--################################################################################### /* 缩写: DDL(Database Definition Language): 数据库定义语言 DML(Database Manipulation Language): 数据库操作语言 DCL(Database Control Language): 数据库控制语言 DTM(Database Trasaction Manag

学习hibernate笔记

以前学习java的时候,一开始就学习了hibernate,那时候总觉得ssh非常高大上,所以就急忙看了下相关视频.不过因为实际需要不高,所以后来一直没有使用上hibernate组件.现在一年过去了,也疯狂学习了java一段时间了,做过几个不大的项目,但是总算对java有些了解.现在参加了工作,公司使用的就是ssh,所以这两天又重新开始捣鼓hibernate.这次学习直接使用editplus,直接开发.看了官网的demo,发现英语也没有想象中那么困难.哈哈,把自己的学习记录下来吧.这里主要记录三个