------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
接口
定义语法
interface 接口名 // 接口名第一个字母为大写I,如:Icompare
{
public void Run() { } //——错误,接口中不能有方法的实现
public IAnimal() { } //——错误,接口中没有构造函数
public void Walk(); //——错误,接口中不能写访问修饰符,
void Walk(); //——正确
public IAnimal() { } //——错误,接口中没有构造函数
public void Walk(); //——错误,接口中不能写访问修饰符,
void Walk(); //——正确
void Eat(DateTime time); //——正确
string name; //——错误,接口不能包含字段
string Name //——正确,接口中可以定义属性
string name; //——错误,接口不能包含字段
string Name //——正确,接口中可以定义属性
{
get; set;
}
} //接口是对方法的约束,是一种规范
在接口中要按照与在类或结构中一样的方式声明方法,只是不允许制定任何修饰符,方法的主体
也要写成一个分号(;)。 ——接口默认的访问性是:public
接口中也不能包含任何字段,但是接口中可以定义属性 ——属性可以看作是特殊的方法
接口的实现
类来继承接口,接口也可以继承接口;
类继承接口,必须把接口的属性和方法全部都实现
实现一个接口时,必须保证每个方法都完全匹配与它对应的接口中的方法:
方法名和返回类型完全匹配;
所有参数(包括ref好out关键字的修饰符)都完全匹配;
多使用接口名作为方法名的前缀,显示的实现接口; ——显示实现接口中的方法时不能加反问修饰符
interface IEat
{
void Eat();
}
interface IRun
{
void Run();
}
class Person : IEat, IRun ——实现多个接口时,以逗号分割的列表列出接口
{ ——如果还继承了类的话,类写在接口前面
void IEat.Eat() ——//接口名打点方法名
{
Console.WriteLine("吃");
}
void IRun.Run()
{
Console.WriteLine("跑");
}
}
{
Console.WriteLine("吃");
}
void IRun.Run()
{
Console.WriteLine("跑");
}
}
通过接口引用一个类:
Person p1 = new Person();
IEat iP1 = p1;
通过接口引用一个对象时,只有通过接口可见的方法才能被调用。
接口的限制:
1、不允许在接口中定义任何字段;
2、不允许在接口中定义任何构造函数;
3、不允许在接口中定义任何析构函数;
4、不允许为任何方法指定修饰符;
5、不允许在接口中嵌套任何类型;
6、接口可以从另一个接口继承,但是不允许从结构或者类中继承一个接口。
抽象类
定义语法
abstract class 类名
{
……
}
抽象类与普通类的比较
相同点:普通类能定义的内容在抽象类里面都可以定义
不同点:抽象类里面可以定义抽象方法,但普通类不能;抽象类不能被实例化,普通类可以;
相同点:普通类能定义的内容在抽象类里面都可以定义
不同点:抽象类里面可以定义抽象方法,但普通类不能;抽象类不能被实例化,普通类可以;
抽象类可以继承其他类,也可以被其他类继承(派生其他类);
抽象类里的抽象方法在派生类中(派生类不是抽象类)必须全部被实现,因为普通类不能有抽象方法;
实现抽象方法使用override,跟重写基类里的vritual方法关键词一样。
abstract class Person
{
public abstract void Eat();
}
class Chinese : Person
{
public override void Eat()
{
Console.WriteLine("用筷子吃");
}
}
抽象类不能被实例化,它的专门用来被继承的;
但是,抽象类可以引用其子类的对象:
Person p1;
Chinese c1 = new Chinese();
p1=c1;
--------------------------------------------------------------------