C#总结复习5(需要进一步复习)

?

第十五章 接口

1、接口: C++中允许多继承没有接口的概念。而java与C#中有,因为C#中 是单继承多接口。

所谓的接口,其实和抽象类、方法相似。都只有一个空方法。其本身不可以为基类,但是允许被其他类继承,而后由其他类或结构实现里面的方法。

2、接口是引用类型

它和继承类似,我们之前可以通过基类的引用的实例化可以访问到派生类当中的方法。在此,我们也可以通过强制转换为接口引用,从而访问实现接口类当中的方法。

interface
iifc1

{

void PrintOut(string s);

}

?

?

class
myclass : iifc1

{

public
void PrintOut(string s);

}

{

myclass mc11 = new myclass();

mc11.PrintOut("i lvoe you!");

iifc1 ifc = (iifc1)mc11;//将类对象的引用转换为接口类型的引用。

ifc.PrintOut("i love you!");//调用引用的方法

}

注:实现接口的类可以从它基类继承实现的代码。也就是说,我可以自己不实现,让基类实现也可以。

派生类为继承接口的。

如果两个接口函数里面都有同样的函数需要实现的话,我们可以采用显式接口成员实现。就是 在实现的时候加上接口名 即可。这样不会造成冲突。

interface
iifc1

{

void PrintOut(string s);

}

?

interface
iifc2

{

void PrintOut(string s);

}

class
myclass : iifc1, iifc2

{

public
void
iifc1.PrintOut(string s) { }

public
void
iifc2.PrintOut(string s) { }

}

接口也可以继承接口,不同的类可以实现同一个接口。

?

第十六章 转换

隐式转换:就是自动转换。

显式转换:就是强制转换。

下面是转换的类型:

我们也可以通过 检测转换结果是否溢出的能力,叫做 溢出检测上下文。

Unchecked(表达式);

对于引用转换:有一点点不一样。

注:从衍生类(派生类)到基类的转换都是隐式转换。

装箱与拆箱:

整个装箱与拆箱的过程如下:

//下面是拆箱与装箱的过程,其实就是通过object为中介,把数据变成可转换的类型。

int i = 10;

object oi = i;//对i装箱并把引用赋值为oi

int ii = (int)oi;//对oi拆箱并把值赋值给ii

用户自定义转换:

通过关键字:implicit 与 explicit 实现。

Public static implicit operator TargetType(SourceType Identifier){ }

两种运算符 : is 与 as

is 主要是用来 检查 从一种类型转换为另一种类型是否会成功。这个有预判效果,事前判断。与unchecked 事后判断不一样。

as 与强制转换类似,假如转换失败,返回null而不抛出异常。

If(bill is Person)

{

P = bill; //这个时候才转换成功。

}

P = bill as Person;

If(p != null)

{

//已经转换成功。

}

?

时间: 2024-10-13 16:05:04

C#总结复习5(需要进一步复习)的相关文章

C#复习总结6 (需要进一步复习)

第十七章 泛型 什么是泛型 泛型是为了适应多种不同种类的数据类型而存在的.有了它之后,我们可以不用为不同的数据类型而单独写一个适配.这样很麻烦. 类型不是对象,而是对象的模板.泛型类型也不是类型,而是类型的模板. 写法 C++中,写法比c#中多了一点东西. Template <typename T> 申明完之后,然后才用T. C#中,直接用 Class MyStack<T> ? 步骤: 声明泛型类型.通过提供真实类型构建构造类型.从构造类型创建实例. <>类型参数. 也

JavaSE复习_8 集合框架复习

△列表迭代器也是不支持在迭代的时候添加元素的,只是列表迭代器自己定义了增删的方法而已.迭代器可以看成实在两个元素之间的指针,每当调用next就跳过一个元素并返回刚刚跳过的元素. △HashTable不允许null作为键和值,而HashMap可以. △在Java中,所有链表实际上都是双向连接的,即每个节点还存放着指向前驱节点的引用 ,add方法将在listiterator迭代器位置前添加一个元素.尽管有Listiterator,但是对列表的并发修改仍然会产生异常,但是这里有个特例,set操作不被视

JavaSE复习_11 IO流复习

△FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表) FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表) BufferedReader br = //高效的用指定的编(解码) new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt&q

.Net学习笔记----2015-07-23(C#基础复习11,字符串复习)

String字符串,字符串可以看成字符数组 1.字符串的不可变性 属性: Length 获得字符串中字符的个数. 方法: ·IsNullOrEmpty() 静态方法,判断为 null 或者为 "" : ·ToCharArray(); 将string转换为char[] ·ToLower() 小写,必须接收返回值.(因为字符串的不可变) `ToUpper() 大写. ·Equals() 比较2个字符串是否相同.忽略大小写的比较:StringComparation ·Contains 是否包

.Net学习笔记----2015-07-21(C#基础复习06,多态复习)

多态 1.虚方法 virtual 2.抽象类 abstract 面向对象计算器 案例: class Program { static void Main(string[] args) { //实现多态:虚方法.抽象类.接口 //简单工厂实现简单计算器效果 while (true) { Console.WriteLine("请输入第一个数字"); double n1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(&qu

从0开始复习JS---1、函数复习

1. 写一个函数,实现对数字数组的排序. function get_order(array){ for(var i = 0; i <array.length-1; i++){ for(var j = 0; j < array.length - 1 -i; j++){ if(array[j] < array[j+1]){ var tem = array[j]; array[j] = array[j+1]; array[j+1] = tem; } } } return array; } co

hdu 2078 复习时间

复习时间 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6586    Accepted Submission(s): 4854 Problem Description 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差

最近的一些复习计划

来中软培训三个月了,交了很多"乱七八糟"的东西,感觉像灌水一样往脑袋里面灌,没怎么吸收好.而且学得也差,是时候重新梳理一下知识了. 总结一下,一共学习了以下知识: 1.html.css.javascript.JQuery.Json.Ajax 2.servlet.xml.JSP.log4j 3.mysql.Oracle 4.JAVA.github.SSH(还未开始学习) 现制定以下复习计划,保证每天按时完成. 1.html.css.javascript.JQuery共计四天. 2.ser

HDU2078 复习时间【水题】【数学】

复习时间 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5093    Accepted Submission(s): 3754 Problem Description 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度