当前位置:  编程技术>.net/c#/asp.net

深入C#实例成员和静态成员详解

    来源: 互联网  发布时间:2014-08-30

    本文导语:  C#类的成员分为两种类型,如下表所示 类型  说明 数据  存储对象所需数据的成员,函数可以使用这些数据执行他们的工作 函数  类中的代码块,函数成员允许类执行它的工作 数据成员分组为实例成员和静态成员 1、实例...

C#类的成员分为两种类型,如下表所示
类型  说明
数据  存储对象所需数据的成员,函数可以使用这些数据执行他们的工作
函数  类中的代码块,函数成员允许类执行它的工作

数据成员分组为实例成员和静态成员
1、实例成员,默认情况下,所有成员都是实例成员,除非他们是常理或者有前缀static关键字。
例如:
 

代码示例:
public int ID;
public string FirstName;
public string LastName;
public string Email;

只能通过类的实例访问实例成员,并且类的每个实例(对象)都有自己的数据副本。
例如:
 

代码示例:

public class Contact 

 public int ID { get; set; } 
 public string Name { get; set; } 
 public string City { get; set; } 

Contact c1 = new Contact(); 
c1.ID = 10; 
c1.Name = "China"; 
c1.City = "Hefei"; 
Contact c2 = new Contact(); 
c2.ID = 100; 
c2.Name = "America"; 
c2.City = "NewYork"; 
 
string s1 = string.Format("c1.ID={0},c1.Name={1},c1.City={2}", c1.ID, c1.Name, c1.City); 
string s2 = string.Format("c2.ID={0},c2.Name={1},c2.City={2}", c2.ID, c2.Name, c2.City); 
MessageBox.Show(s1 + "nr" + s2); 

2、静态成员
静态数据成员属于类,而不是属于类的每个实例,使用static关键定义静态成员,如:
 

代码示例:
public class Contact 

  public static int count; 
public int ID { get; set; } 
public string Name { get; set; } 
public string City { get; set; } 

不可以通过类的实例来访问count,需要通过类访问该变量,如:Contact.count=4;

C#静态类和静态类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。

静态类:
类可以声明为static的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。

使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。

静态类的主要功能如下:

1、它们仅包含静态成员。

2、它们不能被实例化。

3、它们是密封的。

4、它们不能包含实例构造函数(C# 编程指南)。

因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。

使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。

静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。

何时使用静态类

假设有一个类 CompanyInfo,它包含用于获取有关公司名称和地址信息的下列方法。

代码示例:

class CompanyInfo 
 

 
public string GetCompanyName() { return "CompanyName"; } 
 
public string GetCompanyAddress() { return "CompanyAddress"; } 
 
//... 
 

不需要将这些方法附加到该类的具体实例。因此,您可以将它声明为静态类,而不是创建此类的不必要实例,如下所示:

代码示例:

static class CompanyInfo 
 

 
public static string GetCompanyName() {  
return "CompanyName"; } 
 
public static string GetCompanyAddress() {  
return "CompanyAddress"; } 
 
//... 
 

使用静态类作为不与特定对象关联的方法的组织单元。此外,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。以一种有意义的方式组织类内部的方法(例如 System 命名空间中的 Math 类的方法)是很有用的。静态成员

即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。

在成员的返回类型之前使用 static 关键字来声明静态类成员,例如:

代码示例:

public class Automobile 
 

 
public static int NumberOfWheels = 4; 
 
public static int SizeOfGasTank 
 

 
get
 

 
return 15; 
 

 

 
public static void Drive() { } 
 
public static event EventType RunOutOfGas; 
//other non-static fields and properties... 
 

静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置。例如:

代码示例:

Automobile.Drive(); 
 
int i = Automobile.NumberOfWheels;

C#静态类和静态类成员的内容就介绍这些吧,希望对大家掌握C#静态类和静态类成员有所帮助。


    
 
 

您可能感兴趣的文章:

  • 深入理解c# static 静态数据成员和方法
  • 一般函数指针和类的成员函数指针深入解析
  • C++ 类的静态成员深入解析
  • 深入C#中静态成员和实例变量详解
  • 深入C#任务管理器中应用程序选项隐藏程序本身的方法详解
  • 深入C# 内存管理以及优化的方法详解
  • 深入c# Func委托的详解
  • C# 多态性的深入理解
  • 深入C#中使用SqlDbType.Xml类型参数的使用详解
  • 深入C# winform清除由GDI绘制出来的所有线条或图形的解决方法
  • 深入Unix时间戳与C# DateTime时间类型互换的详解
  • C# interface与delegate效能比较的深入解析
  • C#中IList<T>与List<T>的区别深入解析
  • 深入分析C#中WinForm控件之Dock顺序调整的详解
  • C#中静态的深入理解
  • C#泛型约束的深入理解
  • C#之CLR内存深入分析
  • 深入解析c#中枚举类型的定义与使用
  • 深入c#绘制验证码的详解
  • 深入c# 类和结构的区别总结详解
  • 深入c# GDI+简单绘图的具体操作步骤(一)
  • 深入探讨C#中的结构struct
  • 深入理解C# abstract和virtual关键字
  • c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java 静态代理 动态代理深入学习
  • 全局静态存储区、堆区和栈区深入剖析
  • 深入理解C++的动态绑定与静态绑定的应用详解
  • 深入探讨Linux静态库与动态库的详解(一看就懂)
  • Java UrlRewriter伪静态技术运用深入分析
  • 深入解析java中的静态代理与动态代理
  • Docker支持更深入的容器日志分析
  • 关于《深入浅出MFC》
  • Linux有没有什么好的高级的书,我要深入,
  • 深入理解linux内核
  • [100分]有没有关于binutils的深入的资料?或者深入底层的资料?
  • 深入理解PHP内核 TIPI
  • 想深入学习Java应该学习哪些东西
  • 哪位有《JSP深入编程》电子版?
  • 想要深入学习LINUX该学什么?
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • 如何深入Linux的内核学习?
  • U-BOOT得掌握到什么程序,用不用深入去学
  • 想深入了解操作系统该怎么做
  • 前一阵子学习了shell脚本,如果想深入点了解linux可以看什么书呢
  • 问一个《深入理解计算机系统》中的问题
  • 深入多线程之:深入分析Interlocked
  • ##想买书深入学习linux下的编程,请指教
  • 深入JDBC sqlserver连接写法的详解
  • 深入oracle特定信息排序的分析
  • 深入分析C中不安全的sprintf与strcpy
  • 哪儿有下载《深入理解Linux内核》这本书?(中文)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3