MyException - 我的异常网
当前位置:我的异常网» C# » C#面向对象高级知识点汇总

C#面向对象高级知识点汇总

www.MyException.Cn  网友分享于:2015-01-22  浏览:0次
C#面向对象高级知识点集锦

1.     面向对象的三大特征?

封装,继承,多态

2.     什么是封装?

封装是面向对象的特征之一。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

3.     问题:什么是类?什么是对象?

回答:类是具有相似属性和方法的对象的集合;对象是指现实世界中各种各样的实体。

4.     程序中的错误可以分为哪几类?

语法错误:语法错误是在编码阶段经常遇到的一类错误。如关键字class写错。该类错误在程序编译时即可被发现。

运行时错误:该类错误是指在程序运行过程中出现的错误。如向数据库插入记录时,却没有提前将数据库连接打开。这类错误也被称为异常,我们可以通过捕获异常进行处理。

逻辑错误:有时我们的程序既没有语法错误,又没有出现运行时错误,但却得到了未预期的结果。如我们想精确计算2除以5的结果,通过int result = 2 / 5;却得到结果0,而非0.4

5.     类的访问修饰符有哪些?

类只能有publicinternal两种访问修饰符。Public:所修饰的类的可访问域是它所在的程序和任何引用该程序的程序,因此不受任何访问限制。Internal:只能在该类所在的程序集中访问。

6.     类的成员有哪几种?他们的访问修饰符有哪些?

类的成员有:字段、属性、方法、事件。

         类成员的访问修饰符包括:privateprotectedpublicinternal

7.     简述 private、 protected、 public、 internal 修饰符的访问权限?

private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

internal: 当前程序集内可以访问。

8.     定义类的语法格式是什么

         修饰符  class  类名

         {

                   类成员

         }

9.     定义方法的语法格式是什么

         修饰符  返回值类型  方法名称(参数列表)

         {

         }

10.属性的相关概念?

属性是一种用于访问类中字段的类成员。属性封装了字段信息,用于提供对字段的保护。

属性由getset访问器组成。get访问器用户读取字段的值;set访问器用户为字段赋值,外部传递的值用关键字value表示。

既含有get又含有set访问器的属性为可读写属性;只含有get访问器的属性为只读属性;只含有set访问器的属性为只写属性。

         访问修饰符  数据类型  属性名

         {

                   get{ };

                   set{ };

         }

11.Readonly和const的异同点

const修饰的常量在声明的时候必须初始化;readonly修饰的常量则既可以在声明的时候初始化,也可以延迟到构造函数初始化。

const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候。

12.索引器

         访问修饰符  数据类型  this[ 数据类型 标示符 ]

         {

                   get{ };

                   set{ };

}

其中,索引器的参数可以是任何数据类型,只是intstring较为常见。

13.静态构造方法

一个类最多只能有一个静态构造方法;静态构造方法优先于非静态构造方法执行;静态构造方法必须是无参数的;静态构造方法不能有任何访问限定符;静态构造方法被static关键字修饰。具体格式如下:

         static  类名称()

         {

         }

14.什么是枚举?

枚举是一组实例有限且固定的常数。如:季节、月份等等。它是值类型的一种特殊形式,它可以是任何形式的整数值(bytesbyteshortushortintuintlongulong),如果未指定则默认为int。其语法格式为:

访问限定符  enum  枚举名称

{

         枚举成员1,

         枚举成员2,

        

}

在使用枚举时,通常有如下限制:枚举内不能定义方法;枚举不能实现接口;枚举不能定义属性或索引器。

15.什么是结构体?它和类有哪些差别?

         结构是程序员自定义的数据类型,它非常类似于类。它内部可以有字段、属性和方法成员。其语法格式为:

         访问修饰符  struct  结构名称

         {

                   //结构成员

}

结构体和类的主要差别为:

结构体是值类型,类是引用类型;

类支持继承,结构体不支持继承;

结构体不能显示声明无参构造方法,类可以声明无参构造方法;

16.什么是值类型和引用类型?请将常见的数据类型进行分类?

         值类型的数据存储在内存的栈中;而引用类型的数据存储在托管堆中,并在栈中添加堆数据的指针或引用地址。

值类型:简单类型(intdoublefloatbooldecimalcharunit)、结构类型、枚举类型

引用类型:字符串、结构体、类、接口

17.什么是装箱和拆箱?

         装箱是指将值类型数据转换为引用类型;拆箱是指将引用类型转换为值类型。

         装箱:int a = 5; object obj = a;

         拆箱:string a = “5”; int b = (int)a;

18.什么是继承?继承的特征是什么?

继承,是面向对象中类与类之间的一种关系。如果一个类A继承自另一个类B,那么我们称A为子类,B为父类。通过继承,使得子类具有父类所有非私有的成员。使用继承能够有效的降低代码冗余。继承的特征:传递性、单根性。语法如下:

访问修饰符  class  子类 : 父类

{

         //类成员

}

19.继承相关知识点汇总

l  一个类只能继承一个类,C#不支持类的多继承,但一个类可以继承多个接口。

l  创建子类对象时,首先会调用父类的构造方法,其次才执行子类的构造方法。

l  默认情况下,子类会调用父类无参的构造方法。

l  在调用子类构造方法时可以人为的显式调用父类的构造方法。

l  在子类中通过base关键字调用父类的成员。

l  可以通过is关键字判断某个对象是否是于指定类型兼容(对象所属的类或其祖先类是否是是指定的类型)。

20.如果防止一个类被继承?

将该类声明为密封的(sealed)即可防止该类被继承。语法如下:

访问修饰符  sealed  class  类名称

{

         //类成员

}

21.什么是多态?C#中如何实现多态?

多态,就是同一操作作用于不同类的实例,不同的类将进行不同的解释,最后产生不同的执行效果。

C#中实现多态分为2步。

第一步,在父类中将允许被重写的方法设置为虚方法,格式如下:

访问修饰符  virtual 返回值类型  方法名(参数列表)

{

}

第二步,在子类中使用override关键字重写父类的虚方法,其格式如下:

访问修饰符  override 返回值类型  方法名(参数列表)

{

}

使用virtualoverride实现方法重写时需要注意如下问题:

基类虚成员被重写时,需要使用相同的访问修饰符。

newstaticvirtual关键字不能与override一同使用。

22.方法重写(override)和方法重载(overload)有什么区别?

方法重载是指在同一个类中多个方法间,方法名称一样但参数列表(参数个数、参数类型、参数顺序)不同。而方法重写是指子类的方法重写父类的方法。

23.什么是抽象类?什么是抽象方法?

         abstract关键字修饰的类就是抽象类。被abstract关键字修饰的方法就是抽象方法。

抽象类、抽象方法的语法格式为:

         访问限定符  abstract  class  类名称

         {

                   访问限定符  abstract  返回值类型  方法名(参数列表);

}

l  抽象类不能通过其构造方法创建实例对象,但可以通过其实现类实例化。

l  如果一个类中存在抽象方法,那么这个类必须是抽象类;一个抽象类可以没有抽象方法,并且抽象类中可以存在非抽象方法。

l  抽象类不能被sealed关键字修饰。

l  抽象方法不能有方法实现,也就是说不能有方法体。方法声明以分号结束。

l  抽象方法实际上是隐藏的virtual方法。

l  抽象类可以继承接口。

24.什么是接口?

接口就是一组操作契约(属性、方法等)的集合。操作契约只能包含声明,不能包含实现部分。其语法格式如下:

         访问限定符  interface  接口名称

         {

                   //接口成员:成员不能有访问限定符

}

l  接口中的成员可以包括:属性、方法、索引器、事件。不能包括字段、构造方法。

l  接口可以有访问限定符,但其成员不能包含访问限定符。

l  接口可以继承接口,并且1个接口可以同时继承多个接口。

l  类继承接口后必须要实现接口中声明的属性或方法等等。

l  子类在继承父类的同时,还可以继承多个接口,基类或接口之间用逗号隔开。

l  抽象类可以继承接口。

25.StringBuilder 和 String 的区别?

String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String

26.string、String;int、Int32;Boolean、bool的区别?

StringInt32Boolean等都属于.Net平台中定义的数据类型,它们可以被C#VB.NET等语言使用;而stringintbool相当于C#中对这些类定义的别名。CTS

27.说出尽可能多的基于.Net Framework的编程语言?

C#VB.NetF#PowerShellIronPythonJ#Ruby.Net

28.集合类和泛型集合类所属的命名空间分别是什么?

集合类的命名空间:System.Collections;泛型集合命名空间:System.Collections.Generic;

29.栈和队列有什么区别?

集合对象

非泛型集合类

泛型集合类

数据存储方式

Stack

Stack<T>

先进后出或后进先出

队列

Queue

Queue<T>

先进先出或后进后出

栈(Stack)常用属性、方法介绍:

成员

功能

Count    属性

获取栈内元素的数量

Push     方法

将元素插入栈的顶部

Pop      方法

移除并返回栈顶元素

Peek     方法

返回栈顶元素,但不将其移除

队列(Queue)常用属性、方法介绍:

成员

功能

Count    属性

获取队列内元素的数量

Enqueue  方法

将对象添加到队列的结尾处

Dequeue  方法

移除并返回位于队列开始处的对象

Peek     方法

返回队列开始处的元素,但不将其移除

30.ArrayList、Hashtable、List<T>、Dictionary<T, K>集合类知识点总结

集合对象

常用方法或属性

数据存储方式

ArrayList

新增元素Add方法

删除元素Remove方法

清空元素Clear方法

元素数量Count属性

存储的元素数据类型为object

存储和访问元素时需要拆箱和装箱

通过索引访问对应的元素

Hashtable

存储的元素数据类型为object

存储和访问元素时需要拆箱和装箱

通过键(Key)访问对应的值(Value)

foreach遍历时元素类型为DictionaryEntry

List<T>

存储的所有元素数据类型都一样,为T

存储和访问元素时无需拆箱和装箱:效率高

通过索引访问对应的元素

Dictionary<T, K>

存储的元素数据类型都一样:键T   K

存储和访问元素时无需拆箱和装箱

通过键(Key)访问对应的值(Value)

foreach遍历时元素类型为KeyValuePair<K, T>

 

31.文件及IO操作的命名空间是什么?请列举几个常用的类?

命名空间为:System.IO。常见的类:FileFileInfoDirectoryDirectoryInfoPathFileStreamStreamWriterStreamReaderBinaryWriterBinaryReaderDriveInfoFileSystemInfo

32.操作文件有哪两种方式?

第一种:可以通过静态类File提供的静态方法实现对文件的创建、拷贝、删除、读取、写入。

第二种:可以通过非静态类FileInfo提供的属性和方法实现对文件的所有操作。

两种方式相比而言,FileInfo支持对文件的更多操作。

33.操作目录由哪两种方式?

第一种:可以通过静态类Directory提供的静态方法实现对目录的创建、移动、删除等操作。

第二种:可以通过非静态类DirectoryInfo提供的属性和方法实现对目录的所有操作。

两种方式相比而言,DirectoryInfo支持对目录的更多操作。

34.如何最快速的读取和写入文本文件?

调用File.WriteAllText(string path,  string text)可以向文件中写入一段文本字符串。

调用File.WriteAllLines(string path,  string lines)可以向文件中写入多行文本字符串。

调用File.AppendAllText(string path,  string contents)可以向文件中追加一段文本字符串。

调用File.ReadAllText(string path)获取文件内所有的内容。

调用File.ReadAllLines(string path)获取文件内所有的行内容。

35.如何实现文件的重命名?

C#没有提供文件重命名的原生方法,但可以通过先拷贝再删除原文件的方式实现。

36.is和as关键字有什么作用?

is:检查对象是否与指定类型兼容。as:用于在兼容的引用类型之间执行转换

37.as和强制类型转换有什么差别?

as用于在引用类型之间进行转换,而强制类型可以在任何类型间进行转换。

强制类型转换失败时,程序会抛出异常;as转换失败则不会抛出异常,直接返回null

38.如何在C#中实现代码块的折叠和展开效果?

使用#region#endregion来实现代码块的折叠和展开。

39.如何获取当前应用程序的工作目录?

方式一:Environment.CurrentDirectory

方式二:Directory.GetCurrentDirectory()

40.为字符串变量赋值时前面的@符号有什么作用?

实现对特殊字符\的转义;实现字符串的多行定义;

new关键字的用法有哪些?

用法一:用于创建对象时调用构造函数

用法二:子类隐藏父类的成员

用法三:泛型约束,表示泛型T必须要包含无参的公共构造方法,where  T  :  new()

41.进程和线程的区别?

计算机中一个正在运行的可执行程序的实例就是进程。一个进程可以包含多个线程。单个线程用于完成一个任务,而同时创建多个线程来完成多项任务,便是多线程。

二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。

用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。

42.C#中调用线程Thread类的那个方法可以启动线程?

调用Thread类的Start方法可以启动线程。

43.C#中线程的命名空间是哪个?列举几个该命名空间下的成员?

线程的命名空间是:System.Threading。该命名空间下包含:ThreadThreadStartThreadState

ThreadPriorityThreadAbortException等等。

44.如何获取当前运行线程?如何让当前线程休眠5秒钟?

获取当前线程:Thread.CurrentThread

让当前线程休眠5秒钟:Thread.Sleep(5000);

45.为线程指定的方法是否可以传递参数?如果在传递参数的前提下,创建线程时应该使用哪种类型的委托?

为线程指定的方法可以传递参数。此时需要使用void  ParameterizedThreadStart(object  data)委托。并且在启动线程时调用Start(object  data)方法向委托绑定的方法传参。

46.请从高到低列举线程的优先级?

Highest  AboveNormal  Normal  BelowNormal  Lowest

最高    较高         普通    较低         最低

47.什么是序列化?

序列化是指将对象的状态转换为可以存储或传输的格式的过程。

48..net中有那三种序列化机制?

二进制、XMLSOAP(简单对象访问协议)

49.二进制序列化类的名称和所在的命名空间分别是什么?

类:BinaryFormatter

命名空间:System.Runtime.Serialization.Formatters.Binary

50.被序列化的类需要在类名称上设置哪个特性?

被序列化的类需要在类名称上设置[Serializable]特性。

51.什么是反射?反射的命名空间是哪个?

反射提供了封装程序集、模块和类型的对象。可以使用反射动态创建类型的实例。

反射的命名空间:System.Reflection

52.列举几个和反射相关的类

Assembly:程序集

Type:类型

MethodInfo:方法

PropertyInfo:属性

FieldInfo:字段

如何在程序中加载一个程序集文件?

Assembly  assembly  =  Assembly.Load(“程序集文件的路径”);

53.如何获取类型信息?

typeof(类名称),如typeof(StudentInfo)

对象.GetType(),如StudentInfo stu = new StudentInfo();  Type type = stu.GetType();

Type.GetType(""),如Type.GetType(“System.Int32”)

54.什么是自动属性?

自动属性是指:在通过属性封装字段时,无需定义字段和实现属性的getset访问器,而由.NET框架自动生成。

如:

private  string  name;

public  string  Name

{

         get{  return this.name;  }

         set{  this.name=value;  }

}

等价于:

public  string   Name  {  get;set;  }

55.什么是对象初始化器?

对象初始化器是指:在调用类的构造方法创建对象时,同时为对象属性赋值。

如:StudentInfo  stu  =  new  StudentInfo(){ Name=”zhangsan”,  Age=20 };

56.什么是集合初始化器?

集合初始化器是指:在实例化一个集合对象的同时,为其指定元素。

如:

List<StudentInfo> list = new List<StudentInfo>()

{

         new StudentInfo(){ Name=”zhangsan”, Age=20},

         new StudentInfo(){Name=”lisi”, Age=25}

};

文章评论

鲜为人知的编程真相
鲜为人知的编程真相
总结2014中国互联网十大段子
总结2014中国互联网十大段子
 程序员的样子
程序员的样子
旅行,写作,编程
旅行,写作,编程
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
漫画:程序员的工作
漫画:程序员的工作
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员和编码员之间的区别
程序员和编码员之间的区别
为什么程序员都是夜猫子
为什么程序员都是夜猫子
如何成为一名黑客
如何成为一名黑客
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
代码女神横空出世
代码女神横空出世
我是如何打败拖延症的
我是如何打败拖延症的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员都该阅读的书
程序员都该阅读的书
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
编程语言是女人
编程语言是女人
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
每天工作4小时的程序员
每天工作4小时的程序员
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员的鄙视链
程序员的鄙视链
程序员应该关注的一些事儿
程序员应该关注的一些事儿
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Java程序员必看电影
Java程序员必看电影
10个调试和排错的小建议
10个调试和排错的小建议
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
一个程序员的时间管理
一个程序员的时间管理
程序员必看的十大电影
程序员必看的十大电影
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有