C#中静态构造函数和一般构造函数有什么区别?另外被定义为静态的变量对象是不是都不能使用修饰符?

如题所述

静态构造函数只在类被调用的第一次启动 类似初始化的作用

静态构造函数不会建立一个实例 而是用于初始化函数本身的一些static的字段的

没有参数 也没有修饰符

例如
public class Database
{
private static readonly string CONNString;
static Database()
{
///从配置文件中读出 数据库连接字符串,并赋值,
CONNString = ".................";
}
public Database()
{
//这里可以调用CONNString 但是以后都无法更改 CONNString

}

}

没有静态变量的说法 通常是静态的字段 为了避免不同线程造成对静态字段更改的不可控事件发生 通常静态字段都使用readonly 表示初始化以后 就只读了
但是也可以不使用 readonly

静态的字段或者属性 以及方法 都可以使用public protect private internal等修饰符
接口中的属性和方法 默认都是public 所以不使用修饰符
静态的字段属性 方法 可以被继承 但是不可以使用虚方法(virtual)重写(override)

静态构造函数是程序调用到类 只在首次 执行一次
一般构造函数 是每次实例化一个类 就会执行一次追问

那调用静态构造函数时 这个首次执行一次是在创建实例时调用还是创建实例后使用实例时调用

追答

在之前 调用
比如
public class test{
static test(){........}
}

这个 你在调用test第一次 都会导致静态构造函数被触发
情况包含 但不仅限于
新建 test 类实例 new test() 或者 获取test的类型 typeof(test)
或者 调用任何继承自test的 类型 或者某个类的字段类型 或者返回类型为test的
或者调用test本身的任何静态的属性 字段 或者方法

追问

也就是说只要使用这个类静态构造函数都会被触发?

追答

对的 第一次 使用或者涉及到 都会触发

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-21
静态构造函数只能用在静态类中,全局只运行一次,用于初始化该静态类。
比如 我要做一个Setting类,它里面有 name、path等字段,都是静态的,这些值存储在一个xml或者文本文档里,现在程序运行了 我要读取这些外部文档来填充这些静态字段,那么这个读取过程写在静态构造函数中是最方便的。
第2个回答  2013-03-20
亲,静态构造函数既没有访问修饰符,也没有参数,非静态类里可以有参数、访问修饰符(internal和public )追问

那如果不是构造函数但是静态的对象是不是也不能有修饰符啊?另外哪一种情况下才使用静态构造函数?

第3个回答  2013-03-20
如果你学习过其他的语言的话就可以理解为何你所学习的那门语言里的意译是一样的含义
第4个回答  2021-02-22

c#中几种函数的区别
1.公共静态函数,是类方法而不是实例方法,其它类可以访问该函数,访问该函数不需要实例化对象.2.对象实例的公共方法,其它对象可以访问此方法.3.私有静态方法,仅类内部使用,外部不访问.Public 公共成员 Private 私有成员 没有注明关键字.net预设为私有成员 有返回值的成员习惯称为函数。无返回值的成员习...

C#中,静态的构造函数跟非静态的有什么区别?
静态构造函数是最早被调用的,只要有静态访问,那么就先调用静态构造函数。其他非静态构造函数会在调用完毕静态的成员之后才被调用。所以一般静态构造函数用来为静态成员初始化,或者作为单件模式中创建对象的唯一入口。例如:private static GoodsManager s_Instance;public static GoodsManager Instance { get{r...

c#中静态构造函数和实例构造函数有什么区别
静态构造函数是系统调用,不用人为调用,你在使用静态属性的时候,系统会先构造一个实例,然后去调用属性,把属性值返回给用户 实例构造函 就必须用户去调用,手动构造对象,

关于C#中的静态构造函数和静态成员
首先说一下理论:静态构造函数是实现一个类进行初始化方法成员。它一般对于静态函数初始化。静态构造函数不能有参数(意味着不能被重载),不能有修饰符(静态构造器永远是私有的所以不能有修饰符)不能被调用,当类被加载时类的静态构造函数被自动调用。用static关键字声明 静态构造函数的运行准则:1、...

C#中静态方法是什么意思?静态成员呢?还有静态类?
(CLR) 自动加载。静态类的特点:仅包含静态成员。不能被实例化。是密封的。不能包含实例构造函数。其静态类像一个容器一样囊括了,这些静态方法、静态字段、包括类用到的属性、容纳了许多的参数以及一些其他的能辅助该完成功能的内容。可简单的理解为放静态方法、静态属性的不能被实例化的类!

C#中,静态类和非静态类的区别是什么?
C#中,静态类和非静态类的区别是什么? 静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享。 静态类中的所有成员必须是静态的。 静态类可以有静态构造函数,静态构造函数不可继承。 静态构造函数可以用于静态类,也可用于非静态类。 静态构造函数无访问修饰符、无参数,...

C#构造方法和构造函数的区别:
虽然也有些人称静态的方法为函数,但其实还是静态方法。在面向对象中有一个术语,构造函数可以重载,也就是有多个不同的形式,参数列表的不同,而具有相同名字的同一对象成员方法都是重载。不管是静态还是普通的, 都是一样的。所以是这两个无任何概念上的区别。

C#中如何调用静态类中的构造函数
•如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运行。•一个类只能有一个静态构造函数。•无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。•最多只运行一次。•静态构造函数不可以被...

c#里 一个类里能存在名字相同的一个静态和动态方法吗,
class A { static A(){} public A(){} } 不过这样就没有什么实际意义,前者为类加载时执行,后者为new时执行.在第一次使用类时,从外部源中初始化某些静态字段方法,类的静态函数其实和全局函数没有任何本质上的区别,除了访问权限根据其在类中声明可能有所限制。 类的静态变量也是同样如此 ...

在C#中静态函数和实例函数的区别?
静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)先明确一下语言:asp.net C#1、静态变量:static string str1 = "1234";2、静态对象static SqlConnection cn = new SqlConnection();3、静态函数class aa{public static string test(string str){return str & "111";...

相似回答