先来看一个例子:
public sealed class DataAccess
{
private static readonly DataAccess access =null;
static DataAccess()
{
access = new DataAccess();
}
public static DataAccess Instance
{
get { return access; }
}
}
这里说明两个知识点
Static构造函数:
引用
1、静态构造函数既没有访问修饰符,也没有参数。
--因为是.NET调用的,所以像public和private等修饰符就没有意义了。
2、在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类。
--也就是说我们无法直接调用静态构造函数,也不可能知道静态构造函数何时会被调用。
3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。
--尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
ReadOnly:
引用
只能在下列上下文中对 readonly 字段进行赋值:
当在声明中初始化变量时,例如:
复制代码
public readonly int y = 5;
对于实例字段,在包含字段声明的类的实例构造函数中;或者,对于静态字段,在包含字段声明的类的静态构造函数中。也只有在这些上下文中,将 readonly 字段作为 out 或 ref 参数传递才有效。
注意
readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数,如下例所示:
注意
public static readonly uint l1 = (uint)DateTime.Now.Ticks;
分享到:
相关推荐
在.NET开发中,如果你需要在静态成员中实现线程安全,通常推荐使用静态初始化器(例如,`static readonly`字段的初始化)或者在首次访问静态成员时进行同步,而不是在静态构造函数中。这种方式可以避免潜在的死锁...
3. **静态类的模拟**:当类中所有方法和字段都是静态的,但不能声明为`static`类(因为`static`类不能有实例成员),可以使用私有构造函数来防止实例化。 **静态构造函数** 静态构造函数是不带访问修饰符和参数的...
而 static readonly 则不同,它是在运行时计算出其值的,因此可以通过静态构造函数来赋值。例如:`static readonly MyClass myins = new MyClass();` 这里 `myins` 的值是在运行时计算出其值的,它可以被赋值。 在...
在C#编程语言中,了解并正确使用`const`、`static`和`readonly`关键字是至关重要的。这些关键字修饰的变量在程序的不同阶段被初始化,并具有不同的作用域和使用方式。下面将详细阐述这三个关键字的区别。 首先,`...
如果 `readonly` 字段没有在声明时初始化,那么必须在实例构造函数或静态构造函数中进行初始化。 下面是一些示例来进一步说明这两个关键字: ```csharp public class MyClass { public const int MyConstInt = 42...
4. **可以在声明时或构造函数中赋值**:与`const`不同,`readonly`变量的值可以在声明时赋值,也可以在构造函数中赋值。 #### 四、示例对比 下面通过具体的示例来进一步说明`const`和`readonly`之间的区别。 #####...
同时,静态构造函数(static constructor)是一种特殊的构造函数,它在类的任何实例创建之前被调用,用于初始化类的静态成员。下面我们将深入探讨这三个概念及其区别。 1. 只读字段(readonly) 只读字段允许在声明...
readonly 字段可以在对象构造过程中的任何时候(包括声明时和在构造函数中)进行初始化。由于 readonly 字段可以被延迟到运行时初始化,因此它们能够使用来自构造函数或其他变量的值。readonly 是一个实例成员,这...
在类中,成员包括了构造函数、析构函数、方法、常量、字段、属性和索引器等。下面将详细阐述这些概念。 1. **构造函数**:构造函数是用于初始化类的新实例的特殊方法。它必须与类名相同,且没有返回类型。在C#中,...
4. readonly可以在申明中初始化,也可以在构造函数中初始化,其它情况不能修改。 namespace const_and_readonly { class Program { static void Main(string[] args) { Console.WriteLine(Half a year have {0} ...
#### 静态构造函数 (Static Constructors) 静态构造函数用于初始化静态成员。它在类首次被加载到应用程序域时调用一次。例如: ```csharp static FLOWER() { /* 初始化静态成员 */ } ``` #### 析构函数 ...
在这个主题中,我们将深入探讨"设计模式_C#",特别是与私有构造函数相关的知识。 首先,私有构造函数(Private Constructor)是类的一个特殊方法,用于初始化对象。当一个类的构造函数被声明为私有时,外部代码无法...
相比之下,`readonly`关键字用于声明一个只读字段,它可以在声明时或者在构造函数中初始化。这意味着`readonly`字段的值可以在运行时确定,可以依赖于其他变量或表达式。例如: ```csharp readonly int myValue; ...
本章详细介绍了C#中的类与对象概念,包括类的实例成员、访问修饰符、构造函数、初始化函数、静态成员、常量和只读字段以及类的继承。通过理解这些概念,开发者能够更好地利用面向对象编程的优势来构建复杂的应用程序...
静态构造函数只能初始化static变量,而静态只读变量(static readonly)只能在静态构造函数中初始化。 3. **属性(Property)**: 属性提供了一种封装字段的机制,使得数据访问可以控制权限(如只读、只写或两者)...
**类的成员**包括类体内的各种声明,如常数、字段、方法、属性、事件、索引器、运算符、构造函数、析构函数、静态构造函数和类型声明: 1. **常数声明**使用`const`关键字,其修饰符包括`new`、`public`、`...
static TestClass() // 静态构造函数 { } } ``` #### 基类构造函数调用 子类可以通过使用`base()`关键字来显式调用基类的构造函数。如果没有显式调用,编译器会自动添加一个默认的无参数`base()`调用。 ```...