[毕业生的商业软件开发之路]C#类型样式

简介:

近期开始接触到在校学生、高校实习生和毕业生,在此说一下笔者对这些徘徊在职场门口的学生一些建议,希望能给这些初学者进入软件开发行业带来一些帮助,使得毕业生能更顺利的进入软件开发公司开始职场生涯,人生来一个完美的转弯。

------------------------------------------------------------------------------------

类型样式

在定义类型的时候可以指定类型的一些特性,这些样式有
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;
    }
}

由于密封类不能被继承,不能被扩展,这可能会影响系统的扩展性,因此慎用,在实际中用得比较少。[袁永福版权所有]





     本文转自xdesigner 51CTO博客,原文链接:http://blog.51cto.com/xdesigner/628962 ,如需转载请自行联系原作者




相关文章
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
35 3
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
53 1
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
16 0
|
2月前
|
C#
C# 可空类型(Nullable)
C# 单问号 ? 与 双问号 ??
51 12
|
4月前
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
133 7
|
4月前
|
程序员 C#
C# 语言类型全解
C# 语言类型全解
27 0
|
4月前
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结
|
4月前
|
传感器 开发框架 JSON
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
201 0
|
4月前
|
存储 前端开发 C#
WPF/C#:更改界面的样式
WPF/C#:更改界面的样式
46 0
|
7月前
|
编译器 C#
C#.Net筑基-类型系统②常见类型 --record是什么类型?
`record`在C#中是一种创建简单、只读数据结构的方式,常用于轻量级数据传输。它本质上是类(默认)或结构体的快捷形式,包含自动生成的属性、`Equals`、`ToString`、解构赋值等方法。记录类型可以继承其他record或接口,但不继承普通类。支持使用`with`语句创建副本。例如,`public record User(string Name, int Age)`会被编译为包含属性、相等比较和`ToString()`等方法的类。记录类型提供了解构赋值和自定义实现,如密封的`sealed`记录,防止子类重写。