C#中的静态成员、静态方法、静态函数之说.docx_第1页
C#中的静态成员、静态方法、静态函数之说.docx_第2页
C#中的静态成员、静态方法、静态函数之说.docx_第3页
C#中的静态成员、静态方法、静态函数之说.docx_第4页
C#中的静态成员、静态方法、静态函数之说.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嘉园 地理科学与旅游学院GIS1103班-寒星一C#静态成员|静态方法|静态构造函数 一、静态成员(static)(1)静态成员属于类所有,非静态成员属于类的实例所有。(2) 每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。二、静态方法(1)静态方法属于类所有,类实例化前即可使用。(2) 非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,这样,静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用.而静态变量的地址对类来说是固定的,故可以使用。 三、静态构造函数(1) 用于对静态字段、只读字段等的初始化。 (2) 添加static关键字,不能添加访问修饰符,因为静态构造函数都是 私自有的。 (3) 类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类任何静态成员才激发静态构造函数 .(4) 静态构造函数是不可继承的,而且不能被直接调用。 (5) 如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。(6) 如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。(7) 无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。 MSDN对静态构造函数的解释:静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。静态构造函数具有以下特点:(1)静态构造函数既没有访问修饰符,也没有参数。(2)在创建第一个实例或引用任何静态成员之前,将自动调用静态构造(3)函数来初始化类。 (4)无法直接调用静态构造函数。(5)在程序中,用户无法控制何时执行静态构造函数。(6)静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。(7)静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。二静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。静态类类可以声明为 static,指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET.Framework 公共语言运行库 (CLR) 自动加载。使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。静态类的主要功能如下:它们仅包含静态成员。它们不能被实例化。它们是密封的。它们不能包含实例构造函数(C# 编程指南)。因此,创建静态类与创建仅包含静态成员和私有构造函数的类基本相同。私有构造函数阻止类被实例化。使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。静态类是密封的,因此不可被继承。它们不能从除 Object 外的任何类中继承。静态类不能包含实例构造函数;但是,它们可以具有静态构造函数。有关更多信息,请参见静态构造函数(C# 编程指南)。何时使用静态类假设有一个 CompanyInfo 类,它包含用于获取有关公司名称和地址信息的下列方法。class CompanyInfopublic string GetCompanyName() return CompanyName; public string GetCompanyAddress() return CompanyAddress; /.不必将这些方法附加到该类的具体实例。因此,您可以将它声明为静态类,而不是创建此类的不必要的实例:static class CompanyInfopublic static string GetCompanyName() return CompanyName; public static string GetCompanyAddress() return CompanyAddress; /.使用静态类作为不与特定对象关联的方法的组织单元。此外,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。以一种有意义的方式组织类内部的方法(例如 System 命名空间中的 Math 类的方法)是很有用的。静态成员即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。静态方法可以被重载,但不能被重写。在成员的返回类型之前使用 static 关键字来声明静态类成员,例如:public class Automobilepublic static int NumberOfWheels = 4;public static int SizeOfGasTankgetreturn 15;public static void Drive() public static event EventType RunOutOfGas;/other non-static fields and properties.静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置。例如:Automobile.Drive();int i = Automobile.NumberOfWheels;示例下面是一个静态类的示例,它包含两个在摄氏温度和华氏温度之间执行来回转换的方法:public static class TemperatureConverterpublic static double CelsiusToFahrenheit(string temperatureCelsius)/ Convert argument to double for calculations.double celsius = System.Double.Parse(temperatureCelsius);/ Convert Celsius to Fahrenheit.double fahrenheit = (celsius * 9 / 5) + 32;return fahrenheit;public static double FahrenheitToCelsius(string temperatureFahrenheit)/ Convert argument to double for calculations.double fahrenheit = System.Double.Parse(temperatureFahrenheit);/ Convert Fahrenheit to Celsius.double celsius = (fahrenheit - 32) * 5 / 9;return celsius;class TestTemperatureConverterstatic void Main()System.Console.WriteLine(Please select the convertor direction);System.Console.WriteLine(1. From Celsius to Fahrenheit.);System.Console.WriteLine(2. From Fahrenheit to Celsius.);System.Console.Write(:);string selection = System.Console.ReadLine();double F, C = 0;switch (selection)case 1:System.Console.Write(Please enter the Celsius temperature: );F = TemperatureConverter.CelsiusToFahrenheit(System.Console.ReadLine();System.Console.WriteLine(Temperature in Fahrenheit: 0:F2, F);break;case 2:System.Console.Write(Please enter the Fahrenheit temperature: );C = TemperatureConverter.FahrenheitToCelsius(System.Console.ReadLine();System.Console.WriteLine(Temperature in Celsius: 0:F2, C);break;default:System.Console.WriteLine(Please select a convertor.);break;输入298.6示例输出:Please select the convertor1. From Celsius to Fahrenheit.2. From Fahrenheit to Celsius.:2Please enter the Fahrenheit temperature

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论