尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【20260815】C# 类、对象和方法

【20260815】C# 类、对象和方法 using System; namespace StudyClass { // 1.普通类包含实例成员 静态成员 class Person { // --------实例成员没有static属于每一个new出来的对象(属于对象)每个对象独立一份-------- public string Name; // 每个人自己的名字 public int Age; // 每个人自己的年龄 // --------静态成员static属于Person类(属于类)全部对象共享同一份-------- public static int PersonCount; // 统计一共创建了多少个人所有人共享 // 实例构造函数new对象的时候执行 public Person(string name, int age) { Name name; Age age; PersonCount; //每new一个人总人数1 } // 实例方法不加static需要对象调用可以访问实例成员也可以访问静态成员 public void ShowMySelf() { // ✅实例方法内可以访问自己对象的实例变量 Name Age Console.WriteLine($我叫{Name}今年{Age}岁); // ✅实例方法内可以直接访问静态成员 PersonCount Console.WriteLine($当前总共有 {PersonCount} 个人); } // 静态方法加static归类不能直接访问实例成员Name/Age public static void ShowTotalPerson() { Console.WriteLine($【静态方法输出】总人数{PersonCount}); // ❌编译报错静态方法不能直接访问实例成员 // Console.WriteLine(Name); // ✅如果静态方法一定要访问实例成员必须手动new对象 Person temp new Person(临时人, 99); Console.WriteLine($静态方法手动new对象访问实例数据{temp.Name}\n); } } // 2.静态类 static class 专门存放工具 /// summary /// 静态类全部都是工具方法不能new对象不能创建实例内部只能写static成员且所有字段、方法必须强制全部加 static。 /// 类比系统的Math类 /// /summary static class MathTools { public static double PI 3.1415926; // 工具计算圆面积不需要对象 public static double GetCircleArea(double r) { return PI * r * r; } // ❌静态类里面不能写实例方法也不能 new,写了直接报错 // public void Test(){} } // 程序入口 Main必须是 static class Program { // Main必须static程序启动的时候还没有任何 new 出来的对象.NET 只能直接调用类身上的静态 Main 作为入口。 static void Main(string[] args) { Console.WriteLine(1.测试普通类实例对象、静态共享数据); // new两个独立对象每个对象有自己的Name、Age Person p1 new Person(张三, 18); Person p2 new Person(李四, 22); // 调用实例方法必须用 对象.方法() p1.ShowMySelf(); p2.ShowMySelf(); // 调用静态方法直接类名.方法()不需要new Person.ShowTotalPerson(); Console.WriteLine(2.测试静态类MathTools工具类不用new); double area MathTools.GetCircleArea(5); Console.WriteLine($半径5的圆面积 {area}\n); // ❌静态类不能new // MathTools tool new MathTools(); Console.WriteLine(3.回顾你最初的代码实例方法 VS 静态方法调用); Program pro new Program(); pro.GreetInstance(); //实例方法必须new对象调用 GreetStatic(); //同类静态方法Main(static)可以直接调用 Console.ReadKey(); } // 实例方法(随便访问静态成员)没有static void GreetInstance() { Console.WriteLine(这是【实例方法GreetInstance】必须new对象才能调用); } // 静态方法(不能直接碰实例成员要访问必须手动 new 对象)加static static void GreetStatic() { Console.WriteLine(这是【静态方法GreetStatic】不需要对象可以在Main直接调用\n); Console.WriteLine(4.最后记住所有方法必须写在 class 类里面不能裸露在 namespace 下没有游离的全局方法/函数); } } }C# 类、对象和方法知识点逐条整理## 一、实例成员不加static属于**对象**1. 实例成员包含实例变量、实例方法。依附于new出来的对象。2. 每执行一次new 类名()就创建一份独立的实例数据多个对象之间数据互不干扰。3. 调用方式**对象.成员名**不new对象就无法使用实例成员。4. 实例方法内✅可以直接访问本对象的实例成员✅**可以直接访问静态成员**。## 二、静态成员加static属于**类**5. 静态成员包含静态变量、静态方法。类加载进内存时就存在**不需要new对象**。6. 全部对象**共享同一份静态数据**一处修改所有对象读取到的值全部改变。7. 调用方式**类名.成员名**同类内部可以省略类名直接调用。8. 核心铁律**静态看不见实例实例看得见静态** - 静态方法中❌不能直接裸写实例变量/实例方法没有默认对象编译器不知道访问哪一个对象。 - 静态方法如果一定要使用实例成员必须手动new对象通过对象.实例成员访问。 - 实例方法可以直接读取静态成员实例方法运行时对象一定存在静态成员一直驻留内存。## 三、Main入口方法9. static void Main() 必须带static。10. 原因程序刚启动还没有任何new出来的对象.NET直接调用类的静态Main开启程序。11. 只有进入Main之后代码中才可以手动new创建对象。## 四、静态类 static class12. 静态类专门用于存放纯工具功能类比系统Math。13. ❌禁止new不能创建实例对象。14. 静态类内部**只允许写static成员不能写实例变量、实例方法**编译器强制报错。15. 不能被继承也不能继承其他类。## 五、普通类 vs 静态类16. 普通类class 类名可以同时拥有实例成员静态成员允许new对象。适合描述现实实体Person、Student。17. 静态类static class 类名全部成员强制static禁止new。只适合纯工具不描述实体。18. 即使普通类可以写静态方法静态类提供编译器强制约束防止写出无意义、错误的代码代码语义更清晰。## 六、什么时候加static什么时候不加19. ✅加static工具函数、全部对象共享的数据和具体对象个体无关。20. ❌不加static描述实体事物每个对象需要保存自己独立的数据和行为。21. 不要为了省事全部加static实体全部static会造成全部对象共用一套数据业务逻辑错乱。 ##七、C#语法硬性规则22. C#**没有真正的全局方法**所有自定义方法必须写在class {}里面不能裸露在namespace下。23. C#9顶级语句只是语法糖底层仍然生成隐藏class和Main不能在顶级语句下自定义方法。## 八、高频报错与解决24. 在static的Main里直接调用实例方法 → 报错。 - 方案①给方法加static方案②new对象对象.方法()调用。25. 静态方法直接裸写实例变量名 → 报错。 - 方案手动new对象通过对象访问实例数据。26. new静态类 → 编译报错静态类禁止实例化。## 九、记忆口诀 实例归对象必须new出来静态归类有直接就能用。 静态不见实例物要访问得new对象实例可见静态物静态常驻内存处。 Main要static启动无对象静态类全static绝不允许new。以后写代码拿不准要不要写 static就问自己两句话这个东西是属于某个个体对象吗是 → 不加 static。这是工具 / 大家共用的数据吗是 → 加 static。
返回列表