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

简介:

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

静态成员

        使用关键字“static ”修饰的类型成员就是静态的,类型的字段、属性、方法、事件、构造函数都可以是静态的。例如在上面的PeopleClass 中使用了以下代码定义了一个静态方法。
 
  1. publicstaticint CalculateAge( DateTime birthday )  
  2. {  
  3.     returnDateTime.Now.Subtract(birthday).Days / 365;  
        这个静态方法就是能根据生日计算周岁数的。由于计算周岁是一个通用的算法,并不局限于某个特定的对象,因此可以将其定义为静态类。
静态成员类型无需创建对象实例即可通过“类型名称. 成员名”的方式调用。比如以下代码就能调用CalculateAge 方法。
 
  1. DateTime dtm = newDateTime(1980, 2, 14);  
  2. int age = PeopleClass.CalculateAge(dtm);  
        对于静态类型,通过“实例变量. 成员名”的方式反而不能调用,比如以下的代码是错误的。
 
  1. PeopleClass instance = newPeopleClass();  
  2. DateTime dtm = newDateTime(1980, 2, 14);  
  3. int age = instance.CalculateAge(dtm);  
        注意调用静态成员C# 和VB.NET 语法有些差别。在VB.NET 中,可以使用“派生的类型名称. 成员名”来调用静态成员,但C# 不支持。比如在类型A 中定义了静态成员M ,而从类型A 之上派生了类型B ,则在VB.NET 中可以使用“A.M ”或者“B.M ”来调用静态成员,但在C# 中不能用“B.M ”这种写法。
例如以下代码中定义了静态方法“Sum ”和静态字段“Value ”,
 
  1. publicclassMyClass  
  2. {  
  3.     public static int Value = 100 ;  
  4.     publicstaticint Sum(int a, int b)  
  5.     {  
  6.         return a + b;  
  7.     }  
        这样我们就可以使用“MyClass.Sum ”来调用这个方法而无需创建对象实例。若还从这个类型派生了新类型,其代码如下
 
  1. publicclassOtherClass : MyClass  
  2. {  
  3. }  
        则在C# 中只能使用“MyClass.Sum ”来调用这个静态方法,而在VB.NET 中可以有“MyClass.Sum ”和“OtherClass.Sum ”两种方式来调用这个静态方法。
 
静态字段
        对于静态字段,是可以赋值的,而且静态字段作用范围是整个程序,相当于全局变量,比如在任意地方修改了此处的静态变量“Value ”的值后,其他地方获得的字段值就是修改后的值。
 
静态构造函数
        被“static ”修饰的无参数构造函数就是类型的静态构造函数,例如对于上面的PeopleClass 类型中就使用了以下代码定义了一个静态构造函数。
 
  1. static PeopleClass()  
  2. {  
  3.     System.Console.WriteLine("Start");  
  4. }  
        在程序加载的时候,若程序没有调用PeopleClass 中的成员,静态构造函数不会被调用,甚至使用typeof 操作也不会调用;但程序中第一次引用了类型的某个成员或者创建了对象实例前,系统会自动的调用一次类型的静态构造函数,而且整个软件运行期间,某个类型的静态构造函数只可能调用一次,不会被重复调用的。
静态构造函数适用于延时进行系统初始化的操作,这能加快系统的启动速度。
 
        注意,静态构造函数必须是没有参数的,而且肯定是私有的,不能设置可访问级别。
 
        没有被“static ”关键字修饰的类型成员就是实例成员,比如PeopleClass 类型中定义了一个ToString 方法,其代码如下。
 
  1. publicoverridestring ToString()  
  2. {  
  3.     return _Code + " " + _Name;  
  4. }  
        此时不能用“PeopleClass.ToString ”来调用这个方法,必须首先创建对象实例,然后调用这个对象实例的方法,其演示代码如下
 
  1. PeopleClass instance = newPeopleClass( );  
  2. instance.ToString( ) ;  
虚拟成员
        被关键字“virtual ”修饰的成员类型是虚拟成员,比如以下代码就包含了一个名为“Sum ”的虚拟函数。
 
  1. publicclassMyClass  
  2. {  
  3.     public virtual int Sum(int a, int b)  
  4.     {  
  5.         return a + b;  
  6.     }  
  7. }  
        其实虚拟成员并不虚拟,它可以包含实质性的功能代码,能完成一定的功能。只不过虚拟成员可以方便的被重载而已,继承者也可以根据需要不重载这些虚拟方法。
 
抽象成员
被关键字“abstract ”修饰的类型成员就是抽象成员。抽象成员只能是属性、方法和索引器。以下代码就定义了一个抽象方法。
 
  1. publicabstractint Sum(int a, int b) ;  
        在这段代码中,“public ”说明方法是公开的;“abstract ”说明这是一个抽象的成员;“int ”为方法的返回值类型;“Sum ”为方法的名称;“int a , int b ”为方法的参数列表。
         定义抽象类型和定义接口的方法类似,只需要写出成员的声明即可,但还需要写出抽象成员的可访问性。
        抽象成员必须出现在抽象类中,而且在从抽象类派生新类型时,所有的抽象方法必须重写以填充方法体。[袁永福版权所有]
 
抽象成员和虚拟成员是有区别的,抽象成员不能定义任何实质的功能,必须被重载;而虚拟成员必须包含完整的代码结构,可以包含实质功能,可以不被重载。
被关键字“const ”修饰的成员字段为常数字段,可以使用“类型名称. 字段名”来引用常数。比如以下代码就包含了一个常数
 
  1. publicclassMyClass  
  2. {  
  3.     publicconstdouble PI = 3.1415926;  
  4. }  
        对此我们可以使用“MyClass.PI ”来获得这个常数值。常数值是不能修改的,比如对于赋值代码“MyClass.PI = 3.14; ”就是错误的;相对于的,静态字段是可以被修改的,比如此处使用代码“ public staticdouble PI = 3.1415926;”来定义这个字段,则就可以对这个字段赋值了。
 

 

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


相关文章
|
3月前
|
存储 安全 编译器
C# 11.0中的泛型属性:类型安全的新篇章
【1月更文挑战第23天】C# 11.0引入了泛型属性的概念,这一新特性为开发者提供了更高级别的类型安全性和灵活性。本文将详细探讨C# 11.0中泛型属性的工作原理、使用场景以及它们对现有编程模式的改进。通过深入了解泛型属性,开发者将能够编写更加健壮、可维护的代码,并充分利用C#语言的最新发展。
|
1月前
|
存储 C# 开发者
C#变量类型
C#变量类型
19 0
|
3月前
|
开发框架 .NET 编译器
C# 9.0中的目标类型新表达式:类型推断的又一进步
【1月更文挑战第16天】C# 9.0引入了目标类型新表达式,这是类型推断功能的一个重要扩展。通过目标类型新表达式,开发者在创建对象时可以省略类型名称,编译器会根据上下文自动推断所需类型。这一特性不仅简化了代码编写,还提高了代码的可读性和维护性。本文将详细介绍目标类型新表达式的语法、使用场景及其对C#编程的影响。
|
3月前
|
存储 C# 容器
掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南
变量是用于存储数据值的容器。 在 C# 中,有不同类型的变量(用不同的关键字定义),例如: int - 存储整数(没有小数点的整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99 char - 存储单个字符,如 'a' 或 'B'。Char 值用单引号括起来 string - 存储文本,如 "Hello World"。String 值用双引号括起来 bool - 存储具有两个状态的值:true 或 false
39 2
|
3月前
|
存储 安全 算法
C# 泛型:类型参数化的强大工具
【1月更文挑战第7天】本文将深入探讨C#语言中的泛型编程,包括泛型的定义、用途、优势以及实际应用。通过类型参数化,泛型允许开发者编写更加灵活且可重用的代码,同时提高程序的类型安全性和性能。本文将通过示例代码和详细解释,帮助读者更好地理解泛型在C#中的重要性和实用性。
|
4月前
|
存储 Java C#
【从Java转C#】第七章:运算符和类型强制转换
【从Java转C#】第七章:运算符和类型强制转换
|
4月前
|
Java 编译器 C#
【从Java转C#】第三章:对象和类型
【从Java转C#】第三章:对象和类型
|
9天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
9天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
9天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。