C#问答题啊

1:静态方法和实例方法的区别,对象能否调用静态方法2:面向对象的三大特征及含义3:抽象方法和虚方法的区别4:抽象类和接口的区别5:c#中有哪些集合类?简述各自的特点6:请简述在。net中类(class)与结构(struct)的区别7:c#中数据类型有哪些?值类型与引用类型的区别8:简述读写文本文件的步骤

1.静态方法用static修饰,它与实例方法不同的是所属的对象不一样,静态方法是属于类的特有属性,只有类本身调用,而实例方法是属于对象的,只要是这个类的对象都可以调用,所以对象不能调用静态方法,只有类本身才可以调用2.面向对象的三大特征:封装、继承、多态; 封装:所谓的封装即把零碎的东西用一个大的盒子装起来使其用起来更方便,也比较清楚,类就是典型的封装,它里面可以包含自己的属性及方法,只要创建它的对象就可以访问了 继承:继承顾名思义存在着父与子的关系,任何类都可以从另一个类中继承,当一个类继承了另一个类,那么这个类继承了这个类的所有成员,可以直接访问,注意:C#继承是单继承的,就是一个类只能派生于一个基类 多态:多态顾名思义也就是可以呈现多重状态。可以通过指向基类的指针,来调用实现派生类中的方法,同样的操作可以呈现出不同的结果3. 抽象方法用abstract来修饰,只能存在于抽象类中,并且没有方法体,它的方法的实现需要通过子类来实现,抽象类就是类所以它也是单继承的。而虚方法用virtual修饰,必需有方法体并且只有存在继承关系才能有虚方法4. 1).类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中.
2).接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;
3).一个类一次可以实现若干个接口,但是只能扩展一个父类
4).接口可以用于支持回调,而继承并不具备这个特点.
5).抽象类不能被密封。
6).抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的.
7).(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。
8).抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。
9).好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。
10).尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解)。同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法。比如asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的对象。使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则。
11).如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法. 5.System.Colloctions中表示集合的行为的接口有:
1)ICollection
定义所有集合的大小、枚举数和同步方法。派生于IEnumerable
它定义了集合类最基本的行为,所有的集合类都实现了这个接口(基接口)
但是它的行为太过基本:主要就是一个Count属性,单独实现它没有太大意义2)IEnumerable
公开枚举数,该枚举数支持在集合上进行简单迭代
它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合
基本上所有的集合类都实现了这个接口3)IList
IList实现是可排序且可按照索引访问其成员的值的集合,它本身实现了ICollection和IEnumerable接口
是所有列表的抽象基类。IList 实现有三种类别:只读、固定大小、可变大小。4)IDictionary
IDictionary实现是键/值对的集合,它本身实现了ICollection和IEnumerable接口
是键/值对的集合的基接口。IDictionary 实现有三种类别:只读、固定大小、可变大小。
IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值------------------------------ .System.Collections中可以直接使用的集合类有:
1)ArrayList
实现了接口:IList、ICollection、IEnumerable
只要集合未被修改,ArrayList 就可安全地同时支持多个读取器
随着向 ArrayList 中添加元素,容量通过重新分配按需自动增加(2倍增加)
如果需要建立一个对象数组,但不能预先知道数组的大小,就可以使用ArrayList
ArrayList把所有元素都当作object对象引用,因而在访问ArrayList的元素时要进行类型转换
优点:动态改变大小、灵活方便的插入和删除元素、可排序
缺点:插入时性能不如数组、不是强类型的2)BitArray
实现了接口:ICollection、IEnumerable
管理位值的压缩数组。3)Hashtable
实现了接口:IDictionary、ICollection、IEnumerable
可以向Hashtable中自由添加和删除元素,有些像ArrayList,但没有那么大的性能开销4)SortedList
实现了接口:IDictionary、ICollection、IEnumerable
SortedLIst兼顾了ArrayList和Hashtable的优点,可按键值来排序5)Queue
实现了接口:ICollection、IEnumerable
Queque是队列,先进先出的访问各个元素
可以调用Queque对象的GetEnumerator()方法,得到IEnumerator对象,来遍历队列中的各个元素6)Stack
实现了接口:ICollection、IEnumerable
Stack是堆栈,后进先出的访问各个元素
可以调用Stack对象的GetEnumerator()方法,得到IEnumerator对象,来遍历堆栈中的各个元素6.结构是一种用关键字struct声明的自定义数据类型。与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型。
1).结构的构造函数和类的构造函数不同。
a.结构不能包含显式的无参数构造函数。结构成员讲自动初始化为它们的默认值。
b.结构不能包含以下形式的初始值设定类:base(argument-list);
2).对于结构中的实例字段成员,不能在声明时赋值初始化。
3).声明了结构类型后,可以使用new运算符创建构造对象,也可以不使用new关键字。如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。
4).结构不支持继承,即一个结构不能从另一个结构或类继承,而且不能作为一个类的基类。但是,结构从基类OBJECT继承。结构也可以实现接口。
5).什么时候用结构呢?结构使用简单,并且很有用,但是要牢记:结构在堆栈中创建,是值类型,而类是引用类型。每当需要一种经常使用的类型,而且大多数情况下该类型只是一些数据时,使用结构能比使用类获得更佳性能。 8.1. 打开文件2. 读/写文件3. 关闭文件写文本文件Listing 1:写文本信息到文件 - TextFileWriter.csusing System;
using System.IO;

namespace csharp_station.howto{
class TextFileWriter {
static void Main(string[] args) {
// 创建文件编写器并打开文件
TextWriter tw = new StreamWriter("date.txt");
// 写一行文本数据到文件
tw.WriteLine(DateTime.Now);
// 关闭文件流
tw.Close();
}
}
}这段程序在运行时创建一个文本文件。在可执行程序所在的文件夹中可以找到名为date.txt的文件。如果查看这个文件的内容,可以看到程序上次运行的日期和时间,格式如下:3/20/2010 8:54:51 PM在Listing 1 中的一个任务是打开文件。通过创建一个StreamWriter的实例返回一个TextWriter类型的对象。其结果可能被分配到一个StreamWriter示例中。StreamWriter构造函数包含一个参数,名字为要打开的文件的名称。如果文件不存在,StreamWriter将创建这个文件。StreamWriter有六个重载的构造方法,运行指定文件不同的方式,缓存信息,编码信息。下面这一行是打开date.txt文件: TextWriter tw = new StreamWriter("date.txt");使用TextWriter实例tw可以将文本信息写如文件。这个例子写入文本的是当前日期和时间,使用DateTime类的Now静态属性。下面代码: tw.WriteLine(DateTime.Now);当写入文件后,要按如下确定文件关闭: tw.Close();从文本文件中读信息Listing 2:从文件中读文本信息 - TextFileReader.csusing System;
using System.IO;

namespace csharp_station.howto{
class TextFileReader {
static void Main(string[] args) {
// 创建阅读器并打开文件create reader & open file
Textreader tr = new StreamReader("date.txt");
// 读一行文本
Console.WriteLine(tr.ReadLine());
// 关闭文件流
tr.Close();
}
}
}在Listing 2中文件打开的行为和Listing 1中使用的方法类似,除了它使用的是StreamReader类的构造方法创建的是Textreader实例。StreamReader类包括几个重载的构造方法允许指定文件的不同方式,文件的编码格式,缓存信息。这个程序在可执行文件的相同目录下打开date.txt文件: Textreader tr = new StreamReader("date.txt");在Console.WriteLine语句中将使用Textreader实例的ReadLine()方法从文件读取的信息显示。Textreader类也包含Read()方法读取一个或更多字符或使用Peek()方法读取下一个字符,而不更改读取器状态或字符源。下面的代码从文本文件中读一整行信息: Console.WriteLine(tr.ReadLine());当读操作完成后,要按如下的方式关闭文件: tr.Close(); 7.一般来说是有二种数据类型的。1:值类型2:引用类型,但指针类型也是C#中的一种数据类型。一般来说人们都是说有前面两种类型,后者时常被遗忘。从内存来说的话它们两者最大的区别是在于,值类型是在栈中存储的,而引用类型它的引用则是放在栈中而数据则是放在堆中存储的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-08
1、静态方法使用关键字static修饰。非静态则没有。对象不能调用静态方法。2、三大特征为:继承、封装、多态。3、抽象方法使用abstruct关键字修饰,且没有方法体,它只能存在于抽象类中。虚方法使用virtual修饰,必须要有方法体,没有也要使用一对大括号。4、抽象类只能被单向继承,而接口则可以多向被实现。5、集合有:Queue,stack arraylist hasttable sortlist 以及对应的泛型。至于对应的特征,每项百度下就OK,比我说的肯定要详细了。呵呵6、类(class) 属于引用类型,(结构体)struct属于值类型。7、 结构体和类的区别: 1:类属于引用类型 结构体属于值类型 2:类可以被继承 结构体不能被继承 3:可以有默认的构造函数 不可以有默认的构造函数。(构造函数必须有参数) 4:可以添加无参的构造函数 可以添加构造函数,但必须带参数 5:创建对象必须使用new关键字 可以使用New,也可以不使用new, 6:类中可以给字段赋值 结构体中不允许给字段赋值8、创建文件流------>创建读写器------->读写操作---------->关闭读写器---------->关闭文件流如果楼主还有什么疑问,请追问,如果没有,请采纳,谢谢
第2个回答  2014-01-08
1实例方法包括构造函数,对某个对象进行数据操作;静态方法使用时并不需要与具体对象相联系。不能,静态方法属于类,只能使用类调用
2封装,继承,多态。封装在C#中有一种密封类,密封类是不允许其他类继承的类。
相似回答