news 2026/8/16 2:02:43

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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 class`

12. 静态类专门用于存放纯工具功能,类比系统`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,就问自己两句话:
  1. 这个东西是属于某个个体对象吗?是 → 不加 static。
  2. 这是工具 / 大家共用的数据吗?是 → 加 static。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 2:00:10

慕课网职场人必修课:高效沟通与自信表达

在职场中&#xff0c;许多人踏实做事、勤恳负责&#xff0c;却常常因为说话方式不当&#xff0c;造成误解、耽误工作&#xff0c;甚至无意间影响职场人际关系。职场沟通从来不是简单的说话交流&#xff0c;而是一门兼顾分寸、逻辑和共情的学问。为了帮助职场人彻底打通沟通的底…

作者头像 李华
网站建设 2026/8/16 1:59:49

绿色免安装拼图工具 PintuMaster 1.6 技术解析:不写注册表、不占 C 盘,如何实现 0 成本搞定证件照/发票拼图?

导语 在日常办公中,拼图看似简单,却常常被大型图像处理软件"绑架"——动辄几个 GB 的安装包、强制写入系统盘、开机自启服务、注册表冗余项…… 而 PintuMaster 1.6(拼图大师)以解压即用的绿色形态,提供常规拼图、证件照专用、发票专用三大核心功能,并针对&q…

作者头像 李华
网站建设 2026/8/16 1:50:56

手机双目虚化拍照课程目录:从零到落地

作者&#xff1a;一位踩过无数坑的双目虚化算法工程师 课程定位&#xff1a;从零到一&#xff0c;带你搞懂手机双摄虚化的每一个细节25章系统掌握双目标定→预览深度→拍照深度→预览虚化→拍照虚化全流程 从单目相机模型到双目视觉基础&#xff0c;从立体匹配到深度图精化&…

作者头像 李华
网站建设 2026/8/16 1:49:07

以实战论 AI:诚邀一线工程师分享模型调优、工程落地真实案例

聊 AI 的文章太多了&#xff0c;但大部分要么停在"概念科普"层面&#xff0c;要么就是"我用了某个模型效果很好"的体验式分享。真正把模型从 60 分调到 85 分的过程&#xff0c;从 demo 到生产踩的那些坑&#xff0c;反而很少有人系统性地讲。 这篇文章不…

作者头像 李华
网站建设 2026/8/16 1:41:39

098、LVGL LED样式与亮度控制

LVGL LED样式与亮度控制 上周帮一个做智能家居面板的客户调试,对方反馈说LED指示灯在夜间模式下亮度刺眼,用lv_led_set_bright()把值压到10以下后,灯直接灭了——这让我意识到很多人对LVGL的LED控件存在误解。今天借这个案例,把LED的样式定制和亮度控制机制彻底讲透。 先…

作者头像 李华
网站建设 2026/8/16 1:40:51

电网建模基石:正序参数与等值电路原理、应用与工程实践

1. 项目概述&#xff1a;从“黑盒”到“白盒”的电网建模之路在电力系统分析这个行当里干了十几年&#xff0c;我越来越觉得&#xff0c;能把一个庞大复杂的电网&#xff0c;用一套简洁的数学模型和电路图给“说清楚”&#xff0c;是件既考验基本功又充满艺术感的事儿。今天咱们…

作者头像 李华