类是最常用的类型种类。类可以是抽象的或密封的。抽象类要求派生类提供实现。密封类不允许派生类。建议尽量多使用类而不是其他类型。基类是对共享一组公共功能的对象进行分组的有用的方式。基类可以提供一组默认功能,同时允许通过扩展进行自定义。应该显式地为类提供构造函数。编译器通常会为没有定义构造函数的类添加公共默认构造函数。如果最初意图是使该类为不可创建的,则这样会使用户对类产生误解。因此,最好的方法是始终至少为类定义一个构造函数。如果希望类是不可创建的,请将构造函数设置为私有。只有在对设计具有清楚的自定义方案时才应将扩展性或多态性添加到设计中。例如,为数据适配器提供接口很困难,而且这么做没有真正的好处。开发人员仍将不得不特别地针对各个适配器编程,因此从提供接口能够得到的仅是微不足道的好处。但是,您确实需要支持所有适配器之间的一致性。尽管接口或抽象类在这种情况中不适当,提供一致的模式仍是非常重要的。可以在基类中为开发人员提供一致的模式。创建基类时请遵循这些指南。基类或接口
接口类型是协议的规范,并为大多数对象类型潜在地支持。无论何时只要可能都使用基类而不是接口。从版本控制的角度来看,类比接口更为灵活。使用类,您可以发布版本 1.0,然后在版本 2.0 中把新方法添加到该类。只要方法不是抽象的,任何现有派生类便继续运行,而不会发生更改。由于接口不支持实现继承,适用于类的模式不适用于接口。将方法添加到接口等效于将抽象方法添加到基类;实现该接口的任何类都将中断,原因是类不实现新方法。在以下情况中接口是适当的: 几个不相关的类要支持协议。
这些类已经建立了基类(例如,一些是用户界面 (UI) 控件,一些是 XML Web services)。
聚合不适当或不实际。
在所有其他的情况中,类继承是更好的模型。受保护的方法和构造函数
通过受保护的方法提供类自定义。基类的公共接口应该为类的使用者提供一组多种多样的功能。但是,类的用户通常希望实现尽可能少的方法以便将那组丰富的功能提供给使用者。为达到这个目标,提供一组非虚拟的或最终的公共方法,这些方法完全调用到为它们提供实现的单个受保护方法。应该用 Impl 后缀标记此方法。使用该模式也称为提供 Template 方法。下面的代码示阐释了这一过程。[C#]
public class MyClass
{
private int x;
private int y;
private int width;
private int height;
BoundsSpecified specified; public void SetBounds(int x, int y, int width, int height)
{
SetBoundsImpl(x, y, width, height, this.specified);
} public void SetBounds(int x, int y, int width, int height,
BoundsSpecified specified)
{
SetBoundsImpl(x, y, width, height, specified);
} protected virtual void SetBoundsImpl(int x, int y, int width, int
height, BoundsSpecified specified)
{
// Add code to perform meaningful opertions here.
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.specified = specified;
}
}如果没有提供构造函数,很多编译器(例如 C# 编译器)会插入一个 public 或 protected 构造函数。因此,为了得到更好的文档和源代码的可读性,应该在所有抽象类上显式定义 protected 构造函数。密封类使用指南
如果类上只有静态方法和属性,则使用密封类。
接口类型是协议的规范,并为大多数对象类型潜在地支持。无论何时只要可能都使用基类而不是接口。从版本控制的角度来看,类比接口更为灵活。使用类,您可以发布版本 1.0,然后在版本 2.0 中把新方法添加到该类。只要方法不是抽象的,任何现有派生类便继续运行,而不会发生更改。由于接口不支持实现继承,适用于类的模式不适用于接口。将方法添加到接口等效于将抽象方法添加到基类;实现该接口的任何类都将中断,原因是类不实现新方法。在以下情况中接口是适当的: 几个不相关的类要支持协议。
这些类已经建立了基类(例如,一些是用户界面 (UI) 控件,一些是 XML Web services)。
聚合不适当或不实际。
在所有其他的情况中,类继承是更好的模型。受保护的方法和构造函数
通过受保护的方法提供类自定义。基类的公共接口应该为类的使用者提供一组多种多样的功能。但是,类的用户通常希望实现尽可能少的方法以便将那组丰富的功能提供给使用者。为达到这个目标,提供一组非虚拟的或最终的公共方法,这些方法完全调用到为它们提供实现的单个受保护方法。应该用 Impl 后缀标记此方法。使用该模式也称为提供 Template 方法。下面的代码示阐释了这一过程。[C#]
public class MyClass
{
private int x;
private int y;
private int width;
private int height;
BoundsSpecified specified; public void SetBounds(int x, int y, int width, int height)
{
SetBoundsImpl(x, y, width, height, this.specified);
} public void SetBounds(int x, int y, int width, int height,
BoundsSpecified specified)
{
SetBoundsImpl(x, y, width, height, specified);
} protected virtual void SetBoundsImpl(int x, int y, int width, int
height, BoundsSpecified specified)
{
// Add code to perform meaningful opertions here.
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.specified = specified;
}
}如果没有提供构造函数,很多编译器(例如 C# 编译器)会插入一个 public 或 protected 构造函数。因此,为了得到更好的文档和源代码的可读性,应该在所有抽象类上显式定义 protected 构造函数。密封类使用指南
如果类上只有静态方法和属性,则使用密封类。
是不是经常和bar什么的在一起的哪个?只是个名字(函数名或变量名)而已,可能有什么历史原因或是E文中的什么东东,不必在意.2 什么是基类? 派生类?
3 class DerivedClass : BaseClass 这句话什么意思? 中间的":"符号干嘛用的?
DerivedClass就是一个派生类,BaseClass是一个基类.中间的":"符号表示它们之间是派生关系,确切地说是DerivedClass派生自BaseClass.4 什么是 命令行参数 ?
假设有这样一个Main函数:
static void Main(string[] args){//args中放置的就是命令行参数
if(args.Length > 0)
Console.WriteLine(args[0]);
else
Console.WriteLine("No args");
}
并且假设编译后的文件为FileNewExit.exe,那么这个Console程序在运行时可以这样:
shell>FileNewExit Hello
5 什么是 构造器?
构造器就是constructor.
eg. class Test{
public Test(){//constructor的名称和类名相同,没有返回值,在类实例化的时候将调用到
//....
}
public Test(string s){//重载的constructor
//.....
}
}
6 什么是 索引器?
class MyArray{
private ArrayList ar = new ArrayList();
public object this[int index]{
set{
if(index == ar.Count)
ar.Add(value);
else if(index >= 0 && index < ar.Count)
ar[index] = value;
else
throw new Exception();
}
get{
if(index >= 0 && index < ar.Count)
return ar[index];
throw new Exception(); }
}
//......
} 这样一来,就可以向操作数组一样来操作MyArray对象了.
MyArray a = new MyArray();
a[0] = "dfad";
//.......
7 哪里有 ildasm 的详细介绍和使用方法?
Inside C#中有讲到================================================================
其实这些都时很基础的了,希望对你有所帮助