1、接口
与类一样,接口可以定义方法、属性、索引、事件
接口并不提供实现。它只表示一种约定,实现接口的类或结构必须遵守该接口定义的约定。
接口将一个方法的名称与它的实现彻底隔绝。
一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口
c#不支持多重继承,因此当某个类需要继承几个类的行为时单纯用类继承的方法不能解决,这时就用接口
请注意噢!
接口声明
接口声明格式:
接口修饰符 interface 接口名: 基接口
{
接口体
}
[例]声明一个IShape接口
public interface IShape {
double Area();
string Type { get; }
}
注意:
接口的所有成员都隐式的是public的,不允许指定任何访问修饰符;
接口只指出方法的名称、返回类型、参数。
接口不能包含字段、常量、域;
接口不能包含构造函数、析构函数和静态成员。
将方法体替换成一个分号
接口名以大写字母I开头
实现方法:声明一个class或struct,让它们从接口继承,然后实现所有接口方法。
[例]实现IShape接口
public class Rectangle : IShape
{
private int width, height;
public Rectangle(int w, int h)
{ width = w; height = h; }
public double Area()
{ return width * height; }
public string Type
{ get { return "矩形"; } }
}
接口实现
实现接口时,遵循的规则:
方法名、返回类型、参数完全匹配
若一个接口、结构或类从多个接口继承,则可以使用一个逗号分隔的列表来列出接口。若一个类还有基类,那么接口将在基类之后列出。
class 类名:基类名,接口1,接口2
{
……
}
为什么使用方法重载?
你编写一段打印程序,要打印的数据包括整型、浮点型、字符串类型等等,且不同数据类型打印方法也不相同,怎么办?
解决办法:
只好为每一种数据类型编写一个单独的打印方法了
printInt(int){……}
printFloat(float) {……}
printString(string) {……}
?
方法重载
print(int printobj){…A…}
print(float printobj){…B…}
print(string printobj){…C…}
static void Main(){
int a;float b;string c;
……
print(a);
print(b);
print(c);
}//相同功能却因数据类型的不同要写成三个方法
麻烦!
回想一下object类型
可以使用object类型来存储任何类型的一个值
如果需要将任意类型的值传给一个方法,那么可以定义object类型的参数
将object作为返回类型,可以让一个方法返回任意类型的值
优点
例:如何创建并操作一个队列
缺点
a
b
例:如何创建并操作一个队列
Queue类表示队列
public void Enqueue(object item);
//入队方法:在队列尾添加一个对象
public object Dequeue();
//出队方法:从队列头移除对象
Queue myqueue=new Queue();
int a=99,b=88;
(a); //将int装箱成一个object
a=(int)();//将object拆箱成int
Clock c=(clock)();//异常
装箱、拆箱需动态分配内存,影响程序性能
拆箱不成功,运行过程中将抛出异常
如何减少需要的装箱量?
如何提高类型安全性??
泛型
c#课件 来自淘豆网m.daumloan.com转载请标明出处.