C#程序语言学习20260312
抽象类就像“动物”这个概念你见过纯纯的“动物”吗没有。你见到的都是具体的“狗”、“猫”、“鸟”。“动物”就是一个抽象的概念它定义了一些所有动物都应该有的东西比如“会动”、“会叫”但具体怎么叫、怎么动得由具体的动物自己决定。在代码里抽象类就是干这个的它不能被 new 出来不能直接创建“动物”对象。它可以包含已经实现好的方法比如所有动物都有“呼吸”实现方式都一样。它可以包含抽象方法比如“叫”强制子类去实现因为不同动物叫声不一样。静态类就像“工具箱”你家的工具箱里面的扳手、螺丝刀你想用的时候直接拿起来就用不需要先“new 一个工具箱”吧静态类就是这样的工具箱里面的方法、属性都是静态的工具直接用类名点出来。它不能被实例化你不能说“我要创建一个工具箱对象”。它通常用来放一些通用的工具方法比如计算、格式转换、辅助函数等。密封类就像“绝版限量款”想象一下某品牌出了一款手机官方说“这是最后一款不允许任何人再改装、再生产衍生型号。”密封类就是这样的类它可以被实例化能 new 出对象。它不能被继承不能有子类。它就是最终的、完整的版本不允许你再扩展。泛型类就像“万能盒子”或者“带标签的抽屉”想象一下你有几个抽屉一个专门放袜子的抽屉里面只能放袜子。一个专门放书的抽屉里面只能放书。一个专门放工具的抽屉里面只能放工具。如果你每种东西都要做一个专属抽屉那得做多少个啊太麻烦了泛型类就是让你做一个通用的抽屉但是你可以给它贴个标签告诉它“这个抽屉我要用来放袜子”然后它就变成袜子专用抽屉放别的东西会报错。在代码里泛型类允许你定义一个类这个类的某些类型比如里面装的数据类型先不确定等创建对象的时候再指定。public class Phone { // ---------- 1. 字段field手机内部的数据 ---------- private string _brand; // 品牌私有不让外面直接改 private decimal _price; // 价格私有 // ---------- 2. 构造函数constructor生产手机时初始化 ---------- public Phone(string brand, decimal price) { _brand brand; _price price; } // ---------- 3. 属性property公开访问品牌和价格可以加验证 ---------- public string Brand { get { return _brand; } // 读取品牌 set { _brand value; } // 设置品牌 } public decimal Price { get { return _price; } set { if (value 0) // 价格不能为负数 _price value; } } // ---------- 4. 实例方法instance method手机能做的事需要对象 ---------- public void Call(string number) { Console.WriteLine($正在用 {_brand} 手机给 {number} 打电话...); } public void SendMessage(string number, string text) { Console.WriteLine($给 {number} 发短信{text}); } // ---------- 5. 静态方法static method属于整个“手机”类型不需要对象 ---------- public static decimal ConvertCurrency(decimal amount, decimal rate) { return amount * rate; // 比如汇率换算和具体某部手机无关 } // ---------- 6. 索引器indexer像数组一样用下标访问手机里的联系人 ---------- private string[] _contacts new string[10]; // 假设存10个联系人 public string this[int index] // 索引器 { get { return _contacts[index]; } set { _contacts[index] value; } } // ---------- 7. 运算符重载operator让手机能比较 ---------- public static bool operator (Phone a, Phone b) { // 如果品牌和价格都一样就认为是同一款手机 return a._brand b._brand a._price b._price; } public static bool operator !(Phone a, Phone b) { return !(a b); } // 重写 Equals 和 GetHashCode 是配套的但这里省略了不然代码太长 // ---------- 8. 事件event来电时触发 ---------- public event EventHandler IncomingCall; // 声明事件 public void SimulateIncomingCall(string caller) { Console.WriteLine($有来电{caller}); IncomingCall?.Invoke(this, EventArgs.Empty); // 触发事件 } // ---------- 9. 析构函数destructor手机被回收时很少用 ---------- ~Phone() { Console.WriteLine(手机被销毁了清理一下...); } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2411113.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!