手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#学习基础概念二十五问续2第1/2页
C#学习基础概念二十五问续2第1/2页
摘要:6.sealed修饰符是干什么的?答:sealed修饰符表示密封用于类时,表示该类不能再被继承,不能和abstract同时使用,因为这两个修...

6.sealed修饰符是干什么的?

答:

sealed修饰符表示密封

用于类时,表示该类不能再被继承,不能和abstract同时使用,因为这两个修饰符在含义上互相排斥

用于方法和属性时,表示该方法或属性不能再被继承,必须和override关键字一起使用,因为使用sealed修饰符的方法或属性肯定是基类中相应的虚成员

通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱

恰当的利用sealed修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员

示例:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceExample06

{

classProgram

{

classA

{

publicvirtualvoidF()

{

Console.WriteLine("A.F");

}

publicvirtualvoidG()

{

Console.WriteLine("A.G");

}

}

classB:A

{

publicsealedoverridevoidF()

{

Console.WriteLine("B.F");

}

publicoverridevoidG()

{

Console.WriteLine("B.G");

}

}

classC:B

{

publicoverridevoidG()

{

Console.WriteLine("C.G");

}

}

staticvoidMain(string[]args)

{

newA().F();

newA().G();

newB().F();

newB().G();

newC().F();

newC().G();

Console.ReadLine();

}

}

}

结果:

类B在继承类A时可以重写两个虚函数,如图所示:

C#学习基础概念二十五问续2第1/2页1

由于类 B 中对 F 方法进行了密封, 类 C 在继承类 B 时只能重写一个函数,如图所示:

C#学习基础概念二十五问续2第1/2页2

控制台输出结果,类C的方法F只能是输出类B中对该方法的实现:

A.F

A.G

B.F

B.G

B.F

C.G

7.override和overload的区别?

答:

override表示重写,用于继承类对基类中虚成员的实现

overload表示重载,用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现

示例:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceExample07

{

classProgram

{

classBaseClass

{

publicvirtualvoidF()

{

Console.WriteLine("BaseClass.F");

}

}

classDeriveClass:BaseClass

{

publicoverridevoidF()

{

base.F();

Console.WriteLine("DeriveClass.F");

}

publicvoidAdd(intLeft,intRight)

{

Console.WriteLine("AddforInt:{0}",Left+Right);

}

publicvoidAdd(doubleLeft,doubleRight)

{

Console.WriteLine("Addforint:{0}",Left+Right);

}

}

staticvoidMain(string[]args)

{

DeriveClasstmpObj=newDeriveClass();

tmpObj.F();

tmpObj.Add(1,2);

tmpObj.Add(1.1,2.2);

Console.ReadLine();

}

}

}

结果:

BaseClass.F

DeriveClass.F

AddforInt:3

Addforint:3.3

8.什么是索引指示器?

答:

实现索引指示器(indexer)的类可以象数组那样使用其实例后的对象,但与数组不同的是索引指示器的参数类型不仅限于int

简单来说,其本质就是一个含参数属性

示例:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceExample08

{

publicclassPoint

{

privatedoublex,y;

publicPoint(doubleX,doubleY)

{

x=X;

y=Y;

}

//重写ToString方法方便输出

publicoverridestringToString()

{

returnString.Format("X:{0},Y:{1}",x,y);

}

}

publicclassPoints

{

Point[]points;

publicPoints(Point[]Points)

{

points=Points;

}

publicintPointNumber

{

get

{

returnpoints.Length;

}

}

//实现索引访问器

publicPointthis[intIndex]

{

get

{

returnpoints[Index];

}

}

}

//感谢watsonhua(http://huazhihao.cnblogs.com/)的指点

//索引指示器的实质是含参属性,参数并不只限于int

classWeatherOfWeek

{

publicstringthis[intIndex]

{

get

{

//注意case段使用return直接返回所以不需要break

switch(Index)

{

case0:

{

return"Todayiscloudy!";

}

case5:

{

return"Todayisthundershower!";

}

default:

{

return"Todayisfine!";

}

}

}

}

publicstringthis[stringDay]

{

get

{

stringTodayWeather=null;

//switch的标准写法

switch(Day)

{

case"Sunday":

{

TodayWeather="Todayiscloudy!";

break;

}

case"Friday":

{

TodayWeather="Todayisthundershower!";

break;

}

default:

{

TodayWeather="Todayisfine!";

break;

}

}

returnTodayWeather;

}

}

}

classProgram

{

staticvoidMain(string[]args)

{

Point[]tmpPoints=newPoint[10];

for(inti=0;i<tmpPoints.Length;i++)

{

tmpPoints[i]=newPoint(i,Math.Sin(i));

}

PointstmpObj=newPoints(tmpPoints);

for(inti=0;i<tmpObj.PointNumber;i++)

{

Console.WriteLine(tmpObj[i]);

}

string[]Week=newstring[]{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Staurday"};

WeatherOfWeektmpWeatherOfWeek=newWeatherOfWeek();

for(inti=0;i<6;i++)

{

Console.WriteLine(tmpWeatherOfWeek[i]);

}

foreach(stringtmpDayinWeek)

{

Console.WriteLine(tmpWeatherOfWeek[tmpDay]);

}

Console.ReadLine();

}

}

}

结果:

X:0,Y:0

X:1,Y:0.841470984807897

X:2,Y:0.909297426825682

X:3,Y:0.141120008059867

X:4,Y:-0.756802495307928

X:5,Y:-0.958924274663138

X:6,Y:-0.279415498198926

X:7,Y:0.656986598718789

X:8,Y:0.989358246623382

X:9,Y:0.412118485241757

Todayiscloudy!

Todayisfine!

Todayisfine!

Todayisfine!

Todayisfine!

Todayisthundershower!

Todayiscloudy!

Todayisfine!

Todayisfine!

Todayisfine!

Todayisfine!

Todayisthundershower!

Todayisfine!

当前1/2页12下一页阅读全文

【C#学习基础概念二十五问续2第1/2页】相关文章:

C#基础概念二十五问 16-20

深入解析:打造自动消失的对话框

C#加密算法汇总(推荐)

C# 骑士飞行棋的源码(分享)

C#基础继承和多态详解

winform下实现win7 Aero磨砂效果实现代码

C#中怎么将一个List转换为只读的

c#开发的程序安装时动态指定windows服务名称

那些年,我还在学习C# 学习笔记续

C# 操作符之二 算数操作符

精品推荐
分类导航