当前位置: 首页 > news >正文

C#编程基础:静态成员与实例成员的区别及访问方式

在C#中,静态成员(Static Members)和实例成员(Instance Members)是类的两种不同类型的成员,它们在定义、存储位置、访问方式以及生命周期等方面存在显著区别。

静态成员

  1. 定义:静态成员是使用static关键字修饰的成员,它们属于类本身,而不是类的任何特定实例。

  2. 存储位置:静态成员存储在托管堆的静态存储区域中,而不是在实例对象的内存中。

  3. 访问方式:静态成员通过类名直接访问,而不是通过类的实例。例如,ClassName.StaticMember

  4. 生命周期:静态成员在程序运行期间一直存在,直到程序结束。它们的生命周期与应用程序域相关联。

  5. 共享性:类的所有实例共享同一个静态成员的值。如果在一个实例中修改了静态成员的值,那么在其他实例中访问该成员时,将看到修改后的值。

实例成员

  1. 定义:实例成员是不使用static关键字修饰的成员,它们属于类的实例(对象)。

  2. 存储位置:实例成员存储在托管堆的对象内存中,每个实例都有自己的成员副本。

  3. 访问方式:实例成员通过类的实例访问。例如,objectName.InstanceMember

  4. 生命周期:实例成员的生命周期与实例对象的生命周期相关联。当对象被创建时,它的成员被分配内存;当对象被垃圾回收时,它的成员的内存也被释放。

  5. 独立性:每个类的实例都有自己的实例成员副本,因此修改一个实例的成员不会影响其他实例的成员。

访问示例

public class MyClass
{// 静态成员public static int StaticField = 10;public static void StaticMethod(){Console.WriteLine("This is a static method.");}// 实例成员public int InstanceField = 20;public void InstanceMethod(){Console.WriteLine("This is an instance method.");}
}class Program
{static void Main(string[] args){// 访问静态成员Console.WriteLine(MyClass.StaticField); // 输出: 10MyClass.StaticMethod(); // 输出: This is a static method.// 创建类的实例MyClass obj = new MyClass();// 访问实例成员Console.WriteLine(obj.InstanceField); // 输出: 20obj.InstanceMethod(); // 输出: This is an instance method.}
}

在上面的示例中,StaticFieldStaticMethodMyClass的静态成员,它们通过类名MyClass直接访问。而InstanceFieldInstanceMethodMyClass的实例成员,它们通过MyClass的实例obj访问。

注意事项

  • 静态成员不能访问实例成员(除非通过实例的引用),因为静态成员在实例创建之前就已经存在,并且它们不知道任何特定的实例。
  • 实例成员可以访问静态成员,因为实例成员可以访问类级别的任何内容。
  • 静态构造函数(如果有的话)在类的任何静态成员被访问之前执行一次,而实例构造函数在每次创建类的实例时执行。

C#实例方法和静态方法的区别


http://www.mrgr.cn/news/68230.html

相关文章:

  • macos中安装和设置ninja
  • 服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例
  • [CUDA] 设置sync模式cudaSetDeviceFlags
  • 如何在 Java 中使用 Canal 同步 MySQL 数据到 Redis
  • Python教程:python枚举类定义和使用
  • Java基础概览和常用知识(二十一)
  • 27系统日志查看
  • 【含开题报告+项目源码+免费部署】基于SSM的医院挂号住院系统的设计与实现
  • nginx中location模块中的root指令和alias指令区别
  • MQTT从入门到精通之 MQTT 客户端编程
  • LabVIEW程序员在工作中常见的挑战
  • 华为Mate70前瞻,鸿蒙NEXT正式版蓄势待发,国产系统迎来关键一战
  • 【CentOS】中的Firewalld:全面介绍与实战应用(上)
  • TCP/IP与HTTP协议:概念、关系与工作原理
  • 【Java知识】java基础-lambda语法详细说明
  • 14.C++ 特殊类与设计模式
  • C++ 的发展
  • 青少年编程与数学 02-003 Go语言网络编程 16课题、Go语言RPC编程
  • Java集合框架之List接口
  • Halcon刚性变换
  • go语言解决rtsp协议只播放部分的问题(业务问题)
  • Android 读取内部文件
  • C++ 标准模板库 (STL)- 高效学习推荐
  • React 中 `key` 属性的警告及其解决方案
  • 初三数学,最优解问题
  • [241108] AMD 开源首批 10 亿参数语言模型:AMD OLMo | Xfce 4.20 Pre1发布