静态类与非静态类的区别?
- 静态类无法实例化(换句话说,无法使用new运算符创建类类型的变量。 由于不存在任何实例变量,因此可以使用类名本身访问静态类的成员)。
- 静态构造函数只调用一次,在程序所驻留的应用程序域的生存期内,静态类会保留在内存中(即使用Static修饰的类,应用一旦启用静态类就会保留在内存中)。
- 静态类只包含静态成员
- 不能包含实例构造函数。
- 静态类会进行密封,因此不能继承。 它们不能继承自任何类(除了 Object)。 静态类不能包含实例构造函数。 但是,它们可以包含静态构造函数。
1. 实例化
- 非静态类可以实例化,也就是说,可以使用
new
关键字创建类的对象。 - 静态类不能实例化,无法使用
new
关键字创建类的对象。
示例:
// 非静态类
public class NonStaticClass
{
public int InstanceVariable;
public NonStaticClass()
{
InstanceVariable = 10;
}
public void Print()
{
Console.WriteLine(InstanceVariable);
}
}
// 静态类
public static class StaticClass
{
public static int StaticVariable;
static StaticClass()
{
StaticVariable = 20;
}
public static void Print()
{
Console.WriteLine(StaticVariable);
}
}
public class Program
{
public static void Main(string[] args)
{
// 非静态类可以实例化
NonStaticClass nonStaticClass = new NonStaticClass();
nonStaticClass.Print(); // 输出:10
// 静态类不能实例化
//StaticClass staticClass = new StaticClass(); // 错误:无法创建“StaticClass”类型的对象
// 访问静态类的成员需要使用类名
StaticClass.Print(); // 输出:20
}
}
2. 构造函数
- 非静态类可以包含实例构造函数,用于在创建对象时初始化对象的成员。
- 静态类不能包含实例构造函数,但可以包含静态构造函数,用于在类第一次加载到内存时执行一次性初始化。
示例:
// 非静态类可以包含实例构造函数
public class NonStaticClass
{
public int InstanceVariable;
public NonStaticClass()
{
InstanceVariable = 10;
}
public void Print()
{
Console.WriteLine(InstanceVariable);
}
}
// 静态类可以包含静态构造函数
public static class StaticClass
{
public static int StaticVariable;
static StaticClass()
{
StaticVariable = 20;
}
public static void Print()
{
Console.WriteLine(StaticVariable);
}
}
public class Program
{
public static void Main(string[] args)
{
// 非静态类的实例构造函数在创建对象时执行
NonStaticClass nonStaticClass = new NonStaticClass();
// 静态类的静态构造函数在类第一次加载到内存时执行
StaticClass.Print(); // 输出:20
}
}
3. 成员类型
- 非静态类可以包含实例成员和静态成员。
- 静态类只能包含静态成员。
示例:
// 非静态类可以包含实例成员和静态成员
public class NonStaticClass
{
public int InstanceVariable; // 实例成员
public static int StaticVariable; // 静态成员
public NonStaticClass()
{
InstanceVariable = 10;
}
public void Print()
{
Console.WriteLine(InstanceVariable);
Console.WriteLine(StaticVariable);
}
}
// 静态类只能包含静态成员
public static class StaticClass
{
public static int StaticVariable;
static StaticClass()
{
StaticVariable = 20;
}
public static void Print()
{
Console.WriteLine(StaticVariable);
}
}
public class Program
{
public static void Main(string[] args)
{
NonStaticClass nonStaticClass = new NonStaticClass();
nonStaticClass.Print(); // 输出:10 20
// 访问静态类的成员需要使用类名
StaticClass.Print(); // 输出:20
}
}
4. 继承
- 非静态类可以继承自其他类。
- 静态类不能继承自其他类,也不能被其他类继承。
示例:
// 非静态类可以继承自其他类
public class Animal
{
public string Name { get; set; }
}
public class Dog : Animal
{
public string Bark()
{
return "汪汪";
}
}
// 静态类不能继承自其他类
//public static class StaticClass : Animal // 错误:静态类不能继承
标签:区别,静态,StaticClass,实例,static,与非,public,构造函数
From: https://www.cnblogs.com/cookie2030/p/18050955