c# static 静态数据成员

① 静态成员属于类所有,非静态成员属于类的实例所有。
② 每创建一个类的实例,都市在内存中为非静(动)态成员新分派一块存储;

静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域。

静态数据成员区别于动态数据成员,静态变量并不是稳定的,只是静态变量在声明的时候不管有没有赋值,都市凭据它的类型分派对应的内存空间,他的可访问性和作用区间与动态变量是一样的

==========================================================================

关于C#中静态数据成员和静态要领的总结。

1.静态数据成员:
界说:
使用static关键字界说的数据成员被称为静态数据成员。
意义:
静态数据成员所属类的所有实例都共享相同的静态成员值。
访问:
实际上,静态成员并不属于某个实例,静态成员属于类。因此,在使用静态成员的时候,不克使用实例名.静态成员名的形式,而应该使用类名.静态成员名来进行那个访问。原因是因为静态变量没有this指针,只能通过类名引用。
内存分派:
分派时间点 -> 静态数据成员与全局变量相似,它的内存分派产生在应用程序类实例化的时候,即程序运行期间,其释放在程序运行结束时,区别在于其作用域差别。静态数据成员只作用在本文件内。
分派地点 -> 静态变量和要领在静态存储区分派内存,而非静态的在栈区或者堆上分派内存 。

=====================================================================
2.静态要领:
界说:
使用static关键字声明的要领被称为静态要领。
访问:
同样是通过类名.要领名来访问。
简述访问规则:
a.静态要领是不属于特定东西的要领,静态要领可以访问静态成员变量,静态要领不可以直接访问实例变量.
假如在静态要领中访问非静态的成员,编译器不会去判定你是通过类直接挪用还是通过东西挪用,一概认为是非法的,因为他不克确定这个非静态的成员是否被分派了内存,他也懒得去确定。
b.假如静态要领要访问实例变量,只有一种要领:
可以在实例函数挪用的情况下,实例变量做为参数传给静态要领。
源代码如下: namespace Test
...{
public class TT
...{
private int num = 10;
public void Method1()
...{
TT.Method2(num); //实例函数挪用,将实例变量num作用参数通报给了静态要领Method2.
}
public static void Method2(int param) //静态要领
...{
param = param * param;
Console.WriteLine(param);
}
public static void Main()
...{
TT.Method2(10);
TT test = new TT();
test.Method1();
}
}
}
即静态要领可以接受实例变量类型的参数,然后用实例要领包裹静态要领,再通报实例变量到静态要领中。
c.静态要领也不克直接挪用实例要领,可以间接挪用,首先要创建一个类的实例,然后通过这一特定东西来挪用实例要领。
即,静态要领要挪用实例要领,只能通过接受东西类型的参数,在要领体内,用东西名.要领名来挪用实例要领。
如:
class nbr
...{
//class body;
public void method_nbr()
...{
//method_nbr body;
}
}
class Myapp
...{
static void Myapp_method(nbr object1)
...{
object1.method_nbr();
}
public static void Main()
...{
nbr myobj = new nbr();
Myapp_method(myobj);
}
}

(0)

相关推荐

  • C#中static静态变量的用法实例

    本文实例讲述了C#中static静态变量的用法.分享给大家供大家参考.具体如下: 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型   静态全局变量 定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量. 特点: ① .该变量在全局数据区分配内存. ② .初始化:如果不显式初始化,那么将被隐式初始化为0.   静态局部变量 定义:在局部

  • C# 静态变量与静态方法实例研究

    程序如下: 复制代码 代码如下: public static string 英汉(string english,翻译结果 一个或多个) { string 英汉辞典 = Settings.Default.辞典所在目录+"haou_dict.xml"; try { if (File.Exists(英汉辞典)) { XDocument dictionary = XDocument.Load(英汉辞典); var query = from p in dictionary.Descendants

  • C#静态方法与非静态方法实例分析

    本文实例分析了C#静态方法与非静态方法,并对其用法进行了较为全面的分析.分享给大家供大家参考.具体分析如下: 通常来说,C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身.所以对静态方法不需要首先创建一个类的实例,而是采用 类名.静态方法 的格式 . 1)static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用. static内部

  • 学习C#静态函数及变量的一个精典例子与代码

    (1)用于对静态字段.只读字段等的初始化.                (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的.          (3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数  (4)静态构造函数是不可继承的,而且不能被直接调用.              (5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行.任何带有初始值设定项的静态字

  • 轻松学习C#的密封类

    密封类概述        并不是所有的类都可以被继承,C#语言中就是密封类.在C#语言中我们可以把类声明为sealed.这表示不能继承该类,如果想要继承那么编译器肯定会报错.在把类或方法标记为sealed时,最可能出现的情形时:如果要对库,类或自己编写的其他类进行操作,则重写某些功能会导致编译错误.也可以因商业原因把类或方法标记为sealed,以防第三方违反注册协议的方式扩展该类.但是在一般情况下,在把类或方法标记为sealed时要小心,因为这么做会限制它的使用.即使不希望它能继承一个类或重写类

  • C#静态变量与实例变量实例分析

    本文实例讲述了C#静态变量与实例变量的具体用法,分享给大家供大家参考.具体分析如下: 1)在语法定义上的区别: 类变量也叫静态变量,静态变量前要加static关键字,而实例变量前则不加: 实例变量也叫对象变量,即没加static 的变量: 2)在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态

  • C#中静态构造函数的几点说明介绍

    静态构造函数是C#的一个新特性,其实好像很少用到.不过当我们想初始化一些静态变量的时候就需要用到它了.这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次.也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用. 复制代码 代码如下: class SimpleClass{// Static constructorstatic SimpleClass(){//}} 在使用静态构造函数的时候应该注意几点: 1.静态构造函数既没有访问修饰符,也没有参数.因为是.NE

  • c#静态方法和非静态方法详细介绍

    C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身.所以对静态方法不需要 首先创建一个类的实例,而是采用类名.静态方法的格式 .1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用!static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是 属于整

  • 理解C#编程中的静态类和静态成员以及密封类

    静态类 静态类与非静态类基本相同,但存在一个区别:静态类不能实例化.也就是说,不能使用 new 关键字创建静态类类型的变量.因为没有实例变量,所以要使用类名本身访问静态类的成员.例如,如果名为 UtilityClass 的静态类有一个名为 MethodA 的公共方法,则按下面的示例所示调用该方法: UtilityClass.MethodA(); 对于只对输入参数进行运算而不获取或设置任何内部实例字段的方法集,静态类可以方便地用作这些方法集的容器.例如,在 .NET Framework 类库中,静

  • C#中实现伪静态页面两种方式介绍

    第一种是在页面global.asax中,相关代码如下: 复制代码 代码如下: void Application_BeginRequest(object sender, EventArgs e) { HttpContext context = ((HttpApplication)sender).Context; string oldurl = context.Request.Path.ToLower(); if ( ( oldurl.IndexOf("-") > 0 &&a

  • C#静态static的用法实例分析

    本文实例讲述了C#静态static的用法,分享给大家供大家参考.具体用法分析如下: 一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类的主要特性: 1:仅包含静态成员. 2:无法实例化. 3:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化. 4:不能包含实例构造

  • C# 静态构造函数使用总结

    •静态构造函数既没有访问修饰符,也没有参数. •如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数. •在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了. •如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行. •如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运

随机推荐