zoukankan
html css js c++ java
基本类型接口(二、EIMI)
14
.
4
调用接口方法详解
14
.
5
接口方法的隐式和显式调用
14
.
6
泛型接口
14
.
7
泛型接口和接口约束
14
.
8
实现具有多个方法名和签名的多个接口
14
.
9
用显示接口方法实现改进编译时类型安全
class
Program
{
public
static
void
Main()
{
SomeValueType sv
=
new
SomeValueType(
5
);
Object o1
=
new
object
();
Int32 n
=
sv.CompareTo(sv);
//
装箱操作
//
n = sv.CompareTo(o1);
//
编译通过,出现运行时错误
OtherValueType ov
=
new
OtherValueType(
5
);
Object o2
=
new
object
();
n
=
ov.CompareTo(ov);
//
没有进行装箱操作
//
n = ov.CompareTo(o2);
//
编译时错误
Console.WriteLine(n);
Console.ReadLine();
}
}
//
未使用EIMI
internal
struct
SomeValueType : IComparable
{
private
Int32 m_x;
public
SomeValueType(Int32 x)
{
m_x
=
x;
}
public
Int32 CompareTo(Object other)
{
return
(m_x
-
((SomeValueType)other).m_x);
}
}
//
使用EIMI
internal
struct
OtherValueType : IComparable
{
private
Int32 m_x;
public
OtherValueType(Int32 x)
{
m_x
=
x;
}
public
Int32 CompareTo(OtherValueType other)
{
return
(m_x
-
other.m_x);
}
Int32 IComparable.CompareTo(Object other)
{
return
CompareTo((OtherValueType)other);
}
}
14
.
10
谨慎使用显示接口方法实现
//
//
internal class Base : IComparable {
//
//
显式接口方法
//
Int32 IComparable.CompareTo(Object o) {
//
Console.WriteLine("Base.ComparaTo");
//
return 0;
//
}
//
}
//
internal class Derived : Base,IComparable {
//
//
接口实现的公共方法
//
public Int32 CompareTo(Object o){
//
Console.WriteLine("Derived.ComparaTo");
//
//
调用基类的CompareTo会导致错误
//
//
base.CompareTo(o);
//
return 0;
//
}
//
}
//
正确定义Base和Derived
internal
class
Base : IComparable
{
//
显式接口方法
Int32 IComparable.CompareTo(Object o)
{
Console.WriteLine(
"
Base's IComparable ComparaTo
"
);
return
0
;
}
//
基类的虚方法
public
virtual
Int32 CompareTo(Object o)
{
Console.WriteLine(
"
Base's virtual ComparaTo
"
);
return
0
;
}
}
internal
class
Derived : Base, IComparable
{
//
也是接口实现的公共方法
public
override
Int32 CompareTo(Object o)
{
Console.WriteLine(
"
Derived.ComparaTo
"
);
return
base
.CompareTo(o);
}
}
14
.
11
设计:基类还是接口
作者:
青羽
查看全文
相关阅读:
教你写Makefile(很全,含有工作经验的)
configure.in详解
使用autoconf与automake自动生成MakeFile文件
例解 autoconf 和 automake 生成 Makefile 文件
MYSQL:SQL中Group By的使用
日志文件系统syslog,syslog-ng
syslog-ng应用详解
sublime的lua插件
MySQL索引类型
linux下automake用法
原文地址:https://www.cnblogs.com/tenghoo/p/1205515.html
最新文章
[Effective JavaScript 笔记]第34条:在原型中存储方法
[Effective JavaScript 笔记]第33条:使构造函数与new操作符无关
[Effective JavaScript 笔记]第32条:始终不要修改__proto__属性
[Effective JavaScript 笔记]第31条:使用Object.getPrototypeOf函数而不要使用__proto__属性
[Effective JavaScript 笔记]第30条:理解prototype、getPrototypeOf和__ptoto__之间的不同
[Effective JavaScript 笔记]第3章:使用函数--个人总结
[Effective JavaScript 笔记]第29条:避免使用非标准的栈检查属性
[Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法
[Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
[Effective JavaScript 笔记]第26条:使用bind方法实现函数的柯里化
热门文章
django之模板层
视图层
Python创建virtualenv(虚拟环境)方法
路由控制
orm介绍
模块的使用与orm简介
Django从入门到放弃
前端开发
数据库中的视图的使用与存储过程
数据库中pymysql模块的使用
Copyright © 2011-2022 走看看