C#接口的三种实现方式
转自原文C#接口的三种实现方式
public interface MyInterface
{
/// 下面三个方法的签名都是
/// .method public hidebysig newslot abstract virtual
/// public+virutal+abstract
void Method1();
void Method2();
void Method3();
} class MyClass : MyInterface
{
/// Method1是Non-overridable的实现,是sealed。签名如下
/// .method public final hidebysig newslot virtual
/// 注意:public+final+virtual
public void Method1() { } /// Method2是Overridable的实现。签名如下
/// .method public hidebysig newslot virtual
/// 注意:public+virtual
public virtual void Method2() { } /// Method3是Explicit的实现,是sealed。签名如下
/// .method private final hidebysig newslot virtual
/// 注意:private+final+virual
void MyInterface.Method3() { }
} class MyDerived : MyClass
{
/// .method public hidebysig
/// Hidden了MyClass的Method1,所以要加new,否则warning
public new void Method1() { } /// .method public hidebysig virtual
public override void Method2() { } /// .method private hidebysig
void Method3() { }
}
总结:
Method2的实现是最常见的。
Method1的实现变成了sealed,用在不想被override的地方。
Method3的实现比较少见,一种情况是类实例不想对外暴露(private),但是在使用接口的地方又可以访问;另一种是在继承多个接口时,多个接口中相同的函数签名。
MyInterface myclass = new MyClass();
myclass.Method3(); // OK
C#接口的三种实现方式的更多相关文章
- JavaScript实现接口的三种经典方式
/* 接口:提供一种说明一个对象应该有哪些方法的手段 js中有三种方式实现接口: 1 注释描述接口 2 属性检测接口 3 鸭式辨型接口 */ /* 1 注释描述接口: 不推荐 优点: 利用注解,给出参 ...
- spring ioc三种注入方式
spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...
- Java多线程的三种实现方式
java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ...
- Linux 双线策略路由的三种实现方式总结+端口映射
Linux 双线策略路由的三种实现方式总结+端口映射 Linux 双线策略路由的三种实现方式总结+端口映射 网络环境 服务器(网关): eth0 为LAN口,IP为 LAN_IP = 192.168. ...
- tomcat下jndi的三种配置方式
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- Spring IOC 三种注入方式
1. 接口注入 2. setter注入 3. 构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...
- IIS下PHP的三种配置方式比较
在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1. ...
- 【转】tomcat下jndi的三种配置方式
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- Service组件 总结 + 绑定理Service三种实现方式 Messager + Binder + AIDL
在Android中进程按优先级可以分为五类,优先级从高到低排列: - 前台进程 该进程包含正在与用户进行交互的界面组件,比如一个Activity - 可视进程 该进程中的组件虽然没有和用户交互,但是仍 ...
随机推荐
- sublime text3安装以及插件配置教程
http://blog.csdn.net/feizaosyuacm/article/details/54729891 本文是安装的Sublime Text3是portable version(可移动版 ...
- BZOJ4556 Tjoi2016&Heoi2016 字符串【后缀自动机+倍增+线段树合并】
Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开 ...
- springboot项目启动之后初始化自定义配置类
前言 今天在写项目的时候,需要再springboot项目启动之后,加载我自定义的配置类的一些方法,百度了之后特此记录下. 正文 方法有两种: 1. 创建自定义类实现 CommandLineRunner ...
- 【angularJS】Filter 过滤器
当从后台获取到的数据呈现到视图上时,此时可能需要对数据进行相应的转换,此时我们可以通过过滤器在不同页面进行不同数据的格式抓换,在AngularJS中有常见默认的过滤器,当然若不满足所需,我们可以自定义 ...
- Apache报错You don't have permission to access on this server
解决方法: 打开httpd.conf文件 <Directory /> AllowOverride none Require all denied </Directory> 修改 ...
- 用Python做图像处理
转自:http://blog.csdn.net/gzlaiyonghao/article/details/1852726 最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能.因 ...
- 【最全 干货 实例】 缓存手册(Memcached、redis、RabbitMQ)
http://www.cnblogs.com/suoning/p/5807247.html 本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 re ...
- Spring Cloud feign 服务超时处理
Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fa ...
- Word动态替换文本
public class WordTest2 { public static void main(String[] args) { /** 此Map存放动态替换的内容,key-Word中定义的变量,v ...
- TCP和UDP通信(C#网络编程) ---- 系列文章
文章系列目录 C#网络编程系列文章(一)之Socket实现异步TCP服务器 C#网络编程系列文章(二)之Socket实现同步TCP服务器 C#网络编程系列文章(三)之TcpListener实现异步TC ...