Static 是C#会用到的关键字,可以用来修饰类、字段、方法、属性、运算符、事件和构造函数。今天在多线程中被静态成员不小心被撞了一下,因此将MSDN的内容整理转下来

  一)静态类

    Static修饰的class是静态类,具有以下的特点:

      •     仅包含静态成员。

      •     无法实例化。

      •     是密封的。

      •     不能包含实例构造函数

      偷懒附上MS的代码

    • public static class TemperatureConverter
      {
      public static double CelsiusToFahrenheit(string temperatureCelsius)
      {
      // Convert argument to double for calculations.
      double celsius = Double.Parse(temperatureCelsius); // Convert Celsius to Fahrenheit.
      double fahrenheit = (celsius * / ) + ; return fahrenheit;
      } public static double FahrenheitToCelsius(string temperatureFahrenheit)
      {
      // Convert argument to double for calculations.
      double fahrenheit = Double.Parse(temperatureFahrenheit); // Convert Fahrenheit to Celsius.
      double celsius = (fahrenheit - ) * / ; return celsius;
      }
      } class TestTemperatureConverter
      {
      static void Main()
      {
      Console.WriteLine("Please select the convertor direction");
      Console.WriteLine("1. From Celsius to Fahrenheit.");
      Console.WriteLine("2. From Fahrenheit to Celsius.");
      Console.Write(":"); string selection = Console.ReadLine();
      double F, C = ; switch (selection)
      {
      case "":
      Console.Write("Please enter the Celsius temperature: ");
      F = TemperatureConverter.CelsiusToFahrenheit(Console.ReadLine());
      Console.WriteLine("Temperature in Fahrenheit: {0:F2}", F);
      break; case "":
      Console.Write("Please enter the Fahrenheit temperature: ");
      C = TemperatureConverter.FahrenheitToCelsius(Console.ReadLine());
      Console.WriteLine("Temperature in Celsius: {0:F2}", C);
      break; default:
      Console.WriteLine("Please select a convertor.");
      break;
      } // Keep the console window open in debug mode.
      Console.WriteLine("Press any key to exit.");
      Console.ReadKey();
      }
      }

      二)静态成员

        非静态类可以包含静态的方法、字段、属性或事件。 即使没有创建类的实例,也可以调用该类中的静态成员。 始终通过类名而不是实例名称访问静态成员。 无论对一个类创建多少个实例,它的静态成员都只有一个副本(今天就是被撞在这里了)。 静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显式传递)。静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例。const 关键字描述的本质上也是静态的,也可以用类似的结构进行访问。 

{
public static int NumberOfWheels = ;
public static int SizeOfGasTank
{
get
{
return ;
}
}
public static void Drive() { }
public static event EventType RunOutOfGas; // Other non-static fields and properties...
}
访问示例:
Automobile.Drive();
int i = Automobile.NumberOfWheels; (const关键字修饰的成员本质上是静态的 ,也用这种方式调用)

      静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例。

  三)静态构造函数

    静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。静态构造函数具有以下的特点:

    •   静态构造函数既没有访问修饰符,也没有参数。

    •   在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化

    •   无法直接调用静态构造函数。

    •   在程序中,用户无法控制何时执行静态构造函数。

    •   静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。

    •   静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。

    •   如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。

  引用地址:

https://msdn.microsoft.com/zh-cn/library/98f28cdx.aspx;

      https://msdn.microsoft.com/zh-cn/library/79b3xss3.aspx;

      https://msdn.microsoft.com/zh-cn/library/k9x6w0hc.aspx;

MSDN知识库_c#关键字_static的更多相关文章

  1. 【C# 线程】 volatile 关键字和Volatile类、Thread.VolatileRead|Thread.VolatileWrite 详细 完整

    overview 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁).SpinLocked(自旋锁).易变构造(volatile关键字.volatile类.Thr ...

  2. 梳理delegate相关概念

    一.前言 可能项目规模较小,项目中除了增删改查就只剩下业务流程,以前都没怎么弄明白的东西时间长了就越发的模糊了... 二.使用场景 MSDN:delegate 是一种可用于封装命名或匿名方法的引用类型 ...

  3. [C#]浅析ref、out参数

    转载:http://www.cnblogs.com/vd630/p/4601919.html#top 按引用传递的参数算是C#与很多其他语言相比的一大特色,想要深入理解这一概念应该说不是一件容易的事, ...

  4. (ETW) Event Trace for Windows 提高 (含pdf下载)

    内容提纲 • 托管代码与非托管代码介绍 • 不安全代码介绍 • 用户模式与内核模式 • ETW执行流程分析 • 日志分析工具介绍:PerfView.exe   ETW与非托管代码 • ETW依赖的So ...

  5. [C#基础]ref和out的区别

    在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:       ref 关键字使参数按 ...

  6. [转]使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试

    本文关键字:Minidumps, Windows, SEH, VisualC, .NET 摘要 本文讲述了 minidumps 是怎样工作的.当你的程序崩溃的时候应该如何生成它们.以及如何在 Visu ...

  7. Linq之查询表达式语法详解

    1.闲言碎语 由于项目的需要接触到Linq,刚开始有些不适应,好多概念都很模糊.不过经过一段时间的摸索,慢慢地对Linq有了一个更加深入的了解.在此记录一下备忘.      2.查询表达式语法 执行L ...

  8. 在.Net框架中 C# 实现多线程的同步方法详解

    本文主要描述在C#中线程同步的方法.线程的基本概念网上资料也很多就不再赘述了.直接接入主题,在多线程开发的应用中,线程同步是不可避免的.在.Net框架中,实现线程同步主要通过以下的几种方式来实现,在M ...

  9. VC 获取指定文件夹路径的方法小结

    VC获取指定文件夹路径 flyfish  2010-3-5 一 使用Shell函数 1 获取应用程序的安装路径 TCHAR buf[_MAX_PATH];SHGetSpecialFolderPath( ...

随机推荐

  1. Jersey框架一:Jersey RESTful WebService框架简介

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  2. 将war文件解压到指定目录

    问:如何将.war文件解压到指定目录? 答:jar命令没有这样的选项. eg:将abc.war解压到当前文件夹? 答:进入目标文件即abc.war文件所在的文件夹,按住shift键并在该文件夹空白处点 ...

  3. jquery 事件绑定以及解绑定

    var targetSelect = $("#@(Perfix)tbData tbody tr select[data-target]"); targetSelect.off(&q ...

  4. Silverlight开源框架SL提供便捷的二次开发银光框架

    Silverlight开发框架SilverFrame欢迎咨询 基于Silverlight4.0开发,兼容Silverlight 5.0,SQLServer2005数据库.WCF: 本框架有清爽的前端界 ...

  5. AppCan做的图片上传代码

    存在AppCan里的网页 index.html <!DOCTYPE html> <html class="um landscape min-width-240px min- ...

  6. activiti基础操作

    package activitiTest; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInp ...

  7. ACL权限设置使用

    acl操作 # 查看操作的分区支不支持acldumpe2fs -h /dev/sda2 | grep aclDefault mount options: user xattr acl 代表支持acl如 ...

  8. 黄聪:Discuz!的SEO优化策略二:如何去掉页脚多余的信息

    论坛搭建好,首先是把多余的东西都砍掉. 页脚的信息在我看来,都是很多余的信息,如下图: 要怎么消灭掉它们呢? 1.进入 全局 -- 站点信息 2.站点名称改为你的论坛名称,它会出现在内页的标题最末位. ...

  9. C#学习笔记三: C#2.0泛型 可控类型 匿名方法和迭代器

    前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...

  10. IGS_学习笔记03_Integrated SOA Gateway设定配置(案例)

    20150506 Created By BaoXinjian