3_静态类与非静态类的区别
静态类与非静态类的区别?
- 静态类无法实例化(换句话说,无法使用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 // 错误:静态类不能继承
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!