zoukankan      html  css  js  c++  java
  • C#编程(二十)----------静态类

    如果类只包含静态的方法和属性,该类就是静态的.静态类在功能上与使用私有静态构造函数创建的类相同.不能创建静态类的实例.使用关键字static关键字,编译器可以检查用户是否不经意间给类添加了实例成员.如果是,就生成一个编译错误.这可以确保不创建静态类的实例.

    语法:

    static class StatucTest

    {

    public static void SayHello()

    {}

    }

    如果要调用SayHello(),不需要创建StaticTest类型的对象,使用类型名即可进行调用.

    StatucTest.SayHello();

    静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,它防止在类的内部声明任何实例字段或方法。

    静态类的主要特征:

    1.仅包含静态成员

    2.无法实例化

    3.是密封的

    4.不能包含实例构造函数

    静态成员

    1.非晶体啊类可以包含静态的方法,字段,属性或时间;

    2.无论对一个类创建多少个实例,他的静态成员都只有一个副本

    3.静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量

    4.静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员

    5.虽然字段不能声明为static const,const字段的行为在本质上是静态的,这样的字段属于累,不属于类的实例.因此可以像使用静态成员的方法使用const字段,类名.成员.

    静态构造函数

    1.静态类可以有静态函数,静态构造函数输不可继承

    2.静态构造函数可用于静态类,也可用于非静态类

    3.静态构造函数无访问修饰符,无参数,只有一个static标志

    4.静态构造函数不可被直接调用,当创建类实例或引用静态成员之前,静态构造函数被自动执行,并只执行一次.

    注意

    1.静态类在内存中是一直有位置的

    2.非静态类在实例化后实在内存中是独立的,他的变量不会重复,在使用后会及时小孩,所以不会出现未知的错误.C#中静态成员是比较敏感的东西,不确定还是不要使用了

    3.建议更多的使用一般类(非静态类).

    使用选择:

    当定义的类不需要实例化,使用静态类;如果需要实例化,需要继承等特性是,应该使用一般类.

    C# 静态成员和方法的学习小结

    数据成员: 数据成员可以分静态变量、实例变量两种. 静态成员:静态成员变量是和类相关联的,可以作为类中""有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问.

    实例成员:实例成员变量是和对象相关联的,访问实例成员变量依赖于实例的存在.

    函数成员: 方法可以主要分为静态方法,实例方法

    静态方法:静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量,静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变 量做为参数传给静态方法。静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。

    实例方法:一个实例方法的执行与特定对象关联,他的执行需要一个对象存在。实例方法可以直接访问静态变量和实例变量,实例方法可以直接访问实例方 法、和静态方法,静态方法的访问方式为类名加点操作符加变量名。当多个实例对象存在时,内存中并不是存在美个特定的实例方法的拷贝,而是,相同类的所有对 象都共享每个实例方法的一个拷贝(实例方法只占用一套空间)。 如果将类中的某个成员声明为static,则称该成员为静态成员。一般来说,静态成员是属于类所有的,而非静态成员则属于类的实例的。每创建一个类的实 例,都在内存中为非静态成员开辟一片区域。而类的静态成员为类所有,为这个类的所有实例共享。无论这个类创建了多少副本,一个静态成员在内存中只占有一块 区域。

    C#类中静态成员变量的生命周期问题,就是什么时候创建,什么时候销毁已声明元素的生存期是元素可供使用的时间周期。变量是唯一具有生存期的元 素;为此,编译器将过程参数和函数返回值视为变量的特殊情况。变量的生存期表示它可以保留值的时间周期。在生存期内变量的值可以更改,但变量总是保留某些 值。

  • 相关阅读:
    用一条UPDATE语句交换两列的值
    js之事件冒泡和事件捕获详细介绍
    C# String与string的区别
    setTimeout()和setInterval()方法的区别?
    jQuery的.bind()、.live()和.delegate()之间区别
    在Hyper-V虚拟机中使用Wi-Fi上网
    调整框架的尺寸,是否显示滚动条,跳出框架
    调整框架的尺寸
    查看jquery绑定的事件函数
    Onload,Onunload,onbeforeunload,$(window).load(function() {})和$(document).ready(function(){})
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7602219.html
Copyright © 2011-2022 走看看