C#抽象方法和多态还有委托

抽象类可以包含抽象方法,抽象属性还有非抽象的成员

抽象类只能够用作基类被其他类继承,不能够创建抽象类的实例,即对抽象类的使用new操作时错误恶的

抽象方法当中可以定义抽象属性

抽象属性不提供属性访问器的实现,方位其的实现由派生类完成

重载的抽象发个hi如

public override 方法名([参数列表])

{方法的实现]}

如果派生类当中没有对抽象方法的进行重写,则派生类仍然时派生类,必须声明为抽象

public absatc class shape{

procted double radius;

public shape(double r){

radius=r;

}

public abstract double cubage();

}


public class globe:shape{

public globe(double r):base(r){

}

public override double cubage()

{

return Math.PI*Radius*radius*radius*4.0/3;

}

public override string ToString(){
return string.Format("球体的体积为:{0}",cubage());

}}

public class cone:shape{

pruvate double height;

public cone(double r,double h):base(r0{height=h;}

public override double cubage(){

return Math.PUI*radiu*radius*height/3;

}

public ovrride string ToString(){
return string.Format("圆锥体的体积是:{0}",cubage();


sealed声明的类称为密封类

密封类时不能被继承的类,不能够作为基类,与抽象类相反

使用sealed修饰的方法称为密封方法

密封的方法不能再派生类当中覆盖,即用sealed声明的方法不能够被改变

所有的派生类使用相同的方法

class A{}

sealed class B:A

{}

class C:B

{}

C类的定义时错误恶的

基类的密封的方法不能再派生类当中覆盖

声明为private,statci的方法也隐含sealed所以不能再派生类当中覆盖

同时声明为override和sealed的派生类的方法可以覆盖基类的方法,但是不能在继承层次的下层派生类当中覆盖

接口是一种引用类型,利用接口可以为不同的类提供通用的共呢个

节后只提供抽象的成员,不提供具体的实现,成员功能由实现接口的类完成的

接口只允许声明属性,事件,索引器,不饿能声明数据成员,静态成员,构造函数,析构函数

接口成员不能够使用Statci,absrtact,override,virtual修饰符,使用new修饰符系统会给出警告提示不需要关键字new

接口成员的

接口允许多继承

接口成员包括从基接口继承的成员和接口本身声明的成员

接口修饰符:public ,procted,internal,private控制接口的访问能力,new是在嵌套接口当中允许存在的修饰符,说明用相同的抿成隐藏一个继承的成员

接口可以继承,

interface ID:IA,IB,IC{

}

public interface IPortA{

void DisplayStringA();

}

public interface IPortB:POrtA{

void DisplayeStringB();

}

对于接口当中存在同名的成员,采用显式实现接口的方法

接口名。成员名

显式实现的成员必须通过所属的接口来调用


((接口名)类对象名).方法名

运算符的重载

public static 返回值类型oeprator 运算符(【形参表列】){

函数体

}

public static ComplexNumber operator +(ComplexNumber x,ComplexNumber y){
return new ComplexNumber(x.real+y.real,x.imaginary+y.imaginary);

}

static void main(string[]args){
int[]array-{1,2,3,4,5,6};

int index;

try{

Console.WriteLine("请输入下标");

index=Convert.ToInt32(Console.ReadLine());

if(index<0||index>array.Length-1)

throw new indexOutOfRangeException("下标应该在0到"+Convert.ToString(array.Lnegth-1)+"之间");

Console.WritelIne("数组再第{0}个元素为:{1}",index,array[index]);

}

catch(IndexOutOfRangeException e){
Console.WriteLine(e.Message);

]

}

委托就是将方法作为方法的参数

public delegate void GreetingDelegate(string name);

public delegate void GreetingDelefate(string name);

委托是一个类,他定了方法的类型,使得可以将方法作为另一个方法的参数进行传递

public delegate void MyDelegate*string s);

委托对象可以通过使用new关键字来创建,且与一个特定的方法有关

当创建委托的时候,传递到new语句的参数就像方法调用一样税额,但是不带有参数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容