C# 实例化接口对象
在head first 设计模式中 用到了很多很多接口对象
首先澄清一个问题,就是接口不仅可以声明对象,而且可以把对象实例化,还可以当做参数被传入。
一、接口回调
这就是继承中的向上转型。父类 FL=new 子类();只不过这里的父类就是interface接口。(个人认为这里不管是class的override还是interface的重写,都是一样的用法)
可以把实现某一接口类创建的对象的引用赋给该接口声明的接口变量,那么该
接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口
中的方法时,就是通知相应的对象调用接口方法
直接上代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
interface Itemp
{
double plus();
}
public class num : Itemp
{
double aa, bb;
public num(double a, double b)
{
this.bb = b;
this.aa = a;
}
public double plus()
{
return (aa * bb);
}
}
class Program
{
static void Main(string[] args)
{
num n = null;//声明类对象引用
Itemp tm = null;//声明接口对象引用
tm = new num(1.1, 2.2);//接口回调(向上转型)
Console.WriteLine(tm.plus());
Console.ReadKey();
}
}
}
通过上面的例子,我们不难看出,接口对象的实例化实际上是一个接口对象作为一个引用
,指向实现了它方法的那个类中的所有方法,这一点非常象C++中的函数指针(在C#中类似委托),但是却是有
区别的。C#中的接口对象实例化实际上是一对多的,而C++中的函数指针是一对一的。
但是需要注意的是,接口对象的实例化必须用实现它的类来实例化,而不能用接口本身实
例化。用接口本身实例化它自己的对象在C#中是不允许的。
C# 实例化接口对象的更多相关文章
- autofac如何注册静态方法里的接口对象
标题可能是不准确的,因为我不知道如何描述.不知道的原因,是对依赖注入一知半解. Autofac可以自动注册对象实例到接口,人所尽知.而在asp.net mvc中,这个实例化的工作,通常在每个控制器的构 ...
- Statemen接口对象
利用Statement接口实现数据表的更新和查询操作 -取得Statement接口对象:Statement createStatement(int resultSetType, int resultS ...
- Java中创建(实例化)对象的五种方式
Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...
- Java基础--接口回调(接口 对象名 = new 类名)理解
接口 对象名1 = new 类名和类名 对象名2 = new 类名的区别是什么? 实例 /** *Person.java 接口 */ public interface Person { void in ...
- 创建DirectInput接口对象说明---(void **)&m_pDI
读别人代码时遇到的,起初没明白过来这是怎么回事,后来忽然想明白了. if (FAILED(DirectInput8Create(appInstance, DIRECTINPUT_VERSION, II ...
- C#中通过类来继承两个接口,父类实例化接口中的方法,子类继承父类,调用方法
实现了父类继承接口,父类实例化接口的方法,子类继承父类,子类调用父类的方法直接使用 代码如下: using System; using System.Collections.Generic; usin ...
- Tcp 数据对象传输接口对象设计
输入是一个对象inputObj,接口对象.Send(inputObj),对端接收之后解包成outputObj(与inputObj应相同),触发onPackageReceive事件 事件 public ...
- Android网络开发之OkHttp--基本用法实例化各个对象
1.实例化OkHttpClient对象,OkHttpClient包含了以下属性,以及set()和get()方法.但并没有包含具体的执行方法,详情见源码. //实例化OkHttpClent对象 priv ...
- 创建java类并实例化类对象
创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...
随机推荐
- PreparedStatement和Statement的区别
转自:http://blog.sina.com.cn/s/blog_77eba18f01019csh.html 1. PreparedStatement接口继承Statement, PreparedS ...
- iOS - 导航控制器
1.导航控制器 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.bac ...
- web前端开发(2)
搜索引擎只能通过标签判断网页的语义. table布局代码量大.对搜素引擎不友好,应该使用div+css布局,使用css控制网页中元素的大小.颜色.位置,让html在样式.结构混杂的局面中挣脱出来,专注 ...
- oracle lsnrctl
Oracle 11G在windows 7系统上不需要设置系统环境变量. 在命令行环境中运行命令: echo %ORACLE_SID% 可以看到此变量并不存在.也可以到注册表验证: HKEY_CURRE ...
- python 基础——常用功能片段
1. 元素去重 data = [1,2,3,4,4,5,5,6] res = set(data) 2. 元素去重排序 res = sorted(set(data)) 2. 打印重复的元素 res = ...
- CentOS里下载百度网盘 / 360 网盘资源的方法
wget -c --referer=引用地址 -O 文件名 "真实下载地址" 例如,我下载资源原在的页面为http://pan.baidu.com/s/1cfJXZ ,实际下载地址 ...
- 关于cornerstone无法上传library文件的问题
在CornerStone中先选中左边的项目: 然后在菜单栏里面选择View->ShowIgnoreItems, 再选择项目中的library文件,点击Add按钮即可上传到服务器:
- TortoiseSVN 更新时忽略指定文件夹
命令行可以这么来svn update –set-depth=exclude 文件夹 那么TortoiseSVN客户端呢?在文件夹右键中的”更新至版本(U)”更新深度选”排除”,确定,搞定下次更新就不会 ...
- MongoDB - Introduction of the mongo Shell
Introduction The mongo shell is an interactive JavaScript interface to MongoDB. You can use the mong ...
- C语言中关于float和double的输入输出格式
1.对于double类型,输入格式为scanf("%lf %lf", &foo, &bar); 对于float类型,输入格式为scanf("%f %f, ...