3_静态类与非静态类的区别

静态类与非静态类的区别?

  1. 静态类无法实例化(换句话说,无法使用new运算符创建类类型的变量。 由于不存在任何实例变量,因此可以使用类名本身访问静态类的成员)。
  2. 静态构造函数只调用一次,在程序所驻留的应用程序域的生存期内,静态类会保留在内存中(即使用Static修饰的类,应用一旦启用静态类就会保留在内存中)。
  3. 静态类只包含静态成员
  4. 不能包含实例构造函数。
  5. 静态类会进行密封,因此不能继承。 它们不能继承自任何类(除了 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 // 错误:静态类不能继承
posted @   甜饼怪2030  阅读(387)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示