当前位置:编程学习 > C#/ASP.NET >>

C#基础总结

1.类包括哪些成员?
一个类的成员包括此类中声明的成员,一般有成员方法,和字段。从基类中继承的的成员包括基类中的常量、方法、属性、事件、索引,但是不包括基类的构造函数、析构函数和静态构造函数。
2.对类与对象的理解,以及他们之间是什么关系?
在面向对象程序设计中,类与对象是两个不同的概念,但其中有着不可分割的联系,对象式对客观事物在计算机中的抽象描述,类是一组相似属性和行为的对象总称,即对象就是类的具体化 实例化。
3.访问修饰符有哪些?分别表示什么意思?
1.private : 修饰的成员为私有成员,只能被该类中的其它成员访问,其他类的成员不可直接访问,C#中private是默认的修饰符。
2.public:修饰的成员为公有成员,可以被改类和其他类中的所有成员访问。
3.protected:修饰的成员为保护有成员,可以被该类和派生类成员访问,不可以被其他类成员访问。
4.internal:使用这种修饰符称为内部成员,内部成员只可以被程序集内部的成员访问,而程序集外的类(包括派生类)不可以访问。
5.protected internal:使用这种修饰符的成员只可以被程序集内部和派生类的成员的成员访问。
4.重载和重写之间的区别,以及与多态特性的联系?
1.重载就是在同一个类中,方法名相同,参数列表不同。
参数列表不同包括:参数的个数不同,参数类型不同等。
重载特征: 
(1).方法名必须相同 
(2).参数列表必须不相同,与参数列表的顺序无关 
(3).返回值类型可以不相同
2重写就是子类重写父类的方法,在调用的时候,子类的方法会覆盖父类的方法,也就是会调用子类的方法。
只有虚方法和抽象方法才能被重写。
相同的方法名称 ,相同的参数列表 ,相同的返回值类型
5.描述静态方法与实例方法的区别 ?(static)
1区别:静态方法方法是属于类的方法;
实例方法是属于由类的对象的方法。
调用时静态方法只需类调用就可以,而实例方法则需类的实例化才能调用。
6.解释构造函数和析构函数的作用,关键字this作用?
1析构函数:(1)。析构函数是在类名前加~得到的;(2)析构函数没有参数,返回类型,修饰符。(3)一个类中至多有一个析构函数,没有的系统会自动调用。(4)析构函数不显示调用,而是在撤销对象时系统自动调用。通常是用作于对象被撤销前的扫尾工作。
2构造函数:创建对象是系统自动调用它为所创建的对象初始化。
3this:this关键字表示的是“当前对象”,当出现在类的实例方法中,代表的是调用该方法的对象;当出现在类的构造方法中时,代表的是调用该构造方法创建的对象
7.解释结构与类的区别 ?
结构是值类型
类是引用类型:
1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object);虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用
  2.继承性
     结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
     类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
     注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样
8.对委托和事件理解总结?
1委托是C#特有的功能,他与C C++中的指针相似,但他比指针的动能更强大。简单地理解,方法的委托就是方法的别名,通过委托不但可以实现方法,还可以将方法传递到其他方法中,是想方法回调。
2
9.解释数组与集合的区别? 
1数组就是具有相同的数据类型的数据元素的有序集,即数组中的元素的类型都是相同的且都是有序的。
2
10.接口与抽象类的区别 ?
一、抽象类:
抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
二、接口:
接口是引用类型的,类似于类,和抽象类的相似之处有三点:
1、不能实例化;
2、包含未实现的方法声明;
3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
另外,接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。



三、抽象类和接口的区别:
1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 
2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 
3.一个类一次可以实现若干个接口,但是只能扩展一个父类 
4.接口可以用于支持回调,而继承并不具备这个特点. 
5.抽象类不能被密封。 
6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 
7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。 
8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。 
9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。 
10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解)。同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法。比如asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的对象。使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则。 
11.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法.
问题:
事件,委托,集合概念不是很清楚,不知道如何使用?
命名空间的作用?
总结
学习了C#中的类,与C++中的类几乎是一样的,但还是有一些差别,C#中的类不支持多继承,每一个类只能有一个基类,但C#中有接口可以实现C++中的多继承功能,类和对象的定义,对象的访问,访问控制,即构造函数和析构函数,都与C++相似。C#中也增加了类的属性,它既可以看成成员变量也可以看成成员方法。类的继承,重载与多态,都与C++有很多相似之处。C#中虽然没有指针,但它新增加了委托,比指针更加强大。通过与C++比较的学习,对C#的学习感觉到并不是十分的难理解了,虽然有些还是很抽象如C#中的事件,集合等一些对于我们这些初学者真的很难理解,很难去使用它。 

--------------------编程问答-------------------- 怎么看像面试题 --------------------编程问答-------------------- --------------------编程问答-------------------- 就是面试题吧。。。面试的都是很基础的东西 --------------------编程问答-------------------- 错误百出。有些概念,死记硬背是不行的,因为差之毫厘,失之千里。
比如
结构对象依然分配在堆栈上而不是堆上
用new关键字,结构体分配在堆上,但是用一个堆栈上的结构类型去赋值,它又被复制到了堆栈上,另外当结构体内嵌在对象中的时候,它永远分配在堆上。对了,什么叫堆,什么叫堆栈???

接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。
“而且这些成员都被定义为公有的”是么,谁教你的?

委托是C#特有的功能,他与C C++中的指针相似
是函数指针吧,差2个汉字意思完全不同了。再说,C++的函数指针是什么?你写个我看看。
--------------------编程问答-------------------- 我打赌,90%不懂委托的人,更不懂“函数指针”是什么。面试官稍微问问就知道你是“总结”还是在背书了。 --------------------编程问答--------------------
引用 5 楼 caozhy 的回复:
我打赌,90%不懂委托的人,更不懂“函数指针”是什么。面试官稍微问问就知道你是“总结”还是在背书了。

解决这个问题还有另外一个途径,就是找个也是背书的面试官,两人一见面就会感觉很有缘分 --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
委托是C#特有的功能,他与C C++中的指针相似
是函数指针吧,差2个汉字意思完全不同了。再说,C++的函数指针是什么?你写个我看看。

版主的意思是?我肿么没看明白 --------------------编程问答-------------------- 面试 题,很多会问到 --------------------编程问答-------------------- 除
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,