近期开始接触到在校学生、高校实习生和毕业生,在此说一下笔者对这些徘徊在职场门口的学生一些建议,希望能给这些初学者进入软件开发行业带来一些帮助,使得毕业生能更顺利的进入软件开发公司开始职场生涯,人生来一个完美的转弯。
------------------------------------------------------------------------------------
在定义类型的时候可以指定类型的一些特性,这些样式有
static class 静态类
被“static”修饰的类就是静态类型,静态类型其所有的成员都必须标记为静态的,否则会编译错误。静态类型一般用于容纳一些通用的例程,比如某些科学数值运算等。
以下C#代码就定义了一个静态类型
public static class MyStaticClass
{
public static int Sum(int a, int b)
{
return a + b;
}
} |
在代码“public static class MyStaticClass”中,“public”定义类型为公开的,“static”说明该类型是静态的,“class”说明正在定义一个类类型,“MyStaticClass”是类型名称。
在这个类型中定义了一个静态方法Sum,在静态类型中不能定义非静态的成员。由于类型的构造函数也是静态的,因此静态类型不能实例化。
关于静态方法可参考下节。
abstract class 抽象类
被“abstract”修饰的类就是抽象类,抽象类是一种介于类和接口之间的类型,定义为抽象类说明其有部分内容尚未实现,有待以后被继承被扩展。以下代码就定义了一个抽象类
public abstract class MyAbstractClass
{
public abstract int Sum(int a, int b);
public int Div(int a, int b)
{
return a / b;
}
} |
在代码“public abstract class MyAbstractClass”中,关键字“abstract”就声明了该类型为抽象类;在代码“public abstract int Sum(int a, int b);”中,关键字“abstract”就声明该成员为抽象成员,抽象成员只能留个定义,不能有任何功能实现代码,因此在这里声明一下Sum方法就用分号结束了定义。
抽象类可以包含不抽象的方法,比如此处包含了一个完整的Div成员方法。。
抽象类不能实例化,对于类型“我的抽象类”,代码“MyAbstractClass instance = new MyAbstractClass( )”是错误的,抽象类必须派生出其他类型才能使用;而且派生的时候,所有的抽象成员必须强制被重写。由于抽象类必须被重载,因此抽象类不能是密封类,也就是说关键字“abstract”和“sealed”是相互排斥的。
以下代码就从抽象类“MyAbstractClass”派生新的类型
public class MyClassFromMyAbstractClass : MyAbstractClass
{
public override int Sum(int a, int b)
{
return a + b;
}
} |
由于从抽象类派生新类型时,开发人员可能忘记抽象类中定义的抽象成员,此时VS.NET的C#代码编辑器提供帮助功能,这个和帮助生成实现接口的功能类型,如下图所示
当文本光标移动到方框处的“MyAbstractClass”,则左下角出现一个智能标签,鼠标点击这个智能标签会弹出一个菜单,点击菜单项目“实现抽象类“MyAbstractClass””就会自动生成以下代码。[袁永福版权所有]
public class MyClassFromMyAbstractClass : MyAbstractClass
{
public override int Sum(int a, int b)
{
throw new NotImplementedException();
}
} |
这个时候开发人员就可以往重载的成员中添加功能代码了。
由于抽象类型不能实例化,因此必须借助它的派生类型才能使用,比如以下的代码
MyAbstractClass instance = new MyClassFromMyAbstractClass();
instance.Div(1, 2);
instance.Sum(3, 4); |
当然派生类型可以独立使用,如以下代码
MyClassFromMyAbstractClass instance2 = new MyClassFromMyAbstractClass();
instance2.Div(1, 2);
instance2.Sum(3, 4); |
sealed class 密封类
被关键字“sealed”修饰的类是密封类,密封类可以继承自其它类,但不能被继承,不能包含虚方法和抽象方法。以下代码就定义了一个密封类
public sealed class MySealedClass
{
public int Sum(int a, int b)
{
return a + b;
}
} |
由于密封类不能被继承,不能被扩展,这可能会影响系统的扩展性,因此慎用,在实际中用得比较少。[袁永福版权所有]