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

24小时二手表网站发稿软文公司

24小时二手表网站,发稿软文公司,帮人做网站赚钱,网络培训方案目录 一、什么是拓展方法? 二、拓展方法有啥用?怎么写拓展方法? 1. ​核心用途 2. ​编写步骤 实现步骤 关键点说明 关键规则 3. ​注意事项 三、什么是运算符重载? 四、运算符重载有啥用?怎么写?…

目录

一、什么是拓展方法?

二、拓展方法有啥用?怎么写拓展方法?

1. ​核心用途

2. ​编写步骤

实现步骤

关键点说明

关键规则

3. ​注意事项

三、什么是运算符重载?

四、运算符重载有啥用?怎么写?

1. ​核心用途

2. ​编写步骤

3. ​可重载的运算符

4. ​注意事项

五、总结

​对比表:拓展方法 vs 运算符重载


前言:当代码学会“七十二变”​

        有没有想过,让 string 类型突然学会统计单词数?或者让你的自定义类像 int 一样支持加减乘除?

        C#的拓展方法就像“魔法外挂”,能让任何类型瞬间解锁新技能,而运算符重载则是“对象变身术”,让你的类摇身一变成为数学高手!

本文将揭秘这两个神器的使用秘籍,让你告别冗长代码,拥抱优雅语法——从此,你的代码不仅能“说话”,还能“算卦”!

一、什么是拓展方法?

        拓展方法(Extension Methods)​是C#中一种特殊的语法,允许为现有类型(包括密封类或系统类型)添加新方法,而无需修改原始代码或创建子类。

概念
为现有的 非静态变量 添加 新方法
作用
1.提高程序拓展性
2.不需要在对象中重新写方法
3.不需要继承来添加方法
4.为别人封装的类型写额外的方法
特点
1.一定是写在静态类中
2.一定是个静态函数
3.第一个参数为拓展目标
4.第一个参数用this修饰

  • 核心特点
    • 定义在静态类中,方法为静态方法。
    • 第一个参数用 this 关键字修饰,表示要扩展的类型。
    • 扩展方法的本质是一个静态方法,但在调用时,编译器会自动将实例对象(即调用者)​作为第一个参数传递进去。这种语法糖让扩展方法看起来像是实例方法,但实际上背后是静态方法的调用逻辑。

基本语法:访问修饰符 static 返回值 函数名(this 拓展类名 参数名,参数类型 参数名,)

  • 示例:为 string 类型添加一个统计单词数的方法。
public static class StringExtensions {public static int WordCount(this string str) {return str.Split(new[] {' ', '.', '?'}, StringSplitOptions.RemoveEmptyEntries).Length;}
}// 使用
string text = "Hello, how are you?";
Console.WriteLine(text.WordCount()); // 输出 4

二、拓展方法有啥用?怎么写拓展方法?

1. ​核心用途

  • 扩展现有类型功能:尤其适用于无法修改源码的类(如系统类型或第三方库)。
  • 链式调用:让代码更流畅(如LINQ基于拓展方法实现)。
var numbers = new List<int> { 1, 2, 3 };
var sum = numbers.Where(n => n > 1).Sum(); // LINQ的Where和Sum均为拓展方法

2. ​编写步骤

  1. 创建静态类:类名建议以 Extensions 结尾(如 StringExtensions)。
  2. 定义静态方法:第一个参数用 this 修饰,表示目标类型。

基本语法:访问修饰符 static 返回值 函数名(this 拓展类名 参数名,参数类型 参数名,)

    public static class MathExtensions {public static double Square(this int num) => num * num;
    }
    // 使用
    int num = 5;
    Console.WriteLine(num.Square()); // 25

            除了为系统内部的类型进行拓展方法,我们自己还可以为自己写的静态类进行拓展方法:      假设有一个 Product 类,表示商品信息:

    实现步骤
    1. 定义静态类:创建名为 ProductExtensions 的静态类。
    2. 编写扩展方法:添加一个静态方法,第一个参数用 this Product product 修饰。
    3. 实现逻辑:在方法内部访问 Product 的公开属性。
    public class Product {public string Name { get; set; }public decimal Price { get; set; }public int Stock { get; set; }
    }

            我们希望为 Product 添加一个扩展方法,用于生成商品描述的格式化字符串,而无需修改 Product 类的原始代码。就可以如下书写:

    public static class ProductExtensions {// 扩展方法:生成商品描述public static string GetDescription(this Product product) {return $"{product.Name} - 价格:¥{product.Price},库存:{product.Stock}件";}// 扩展方法:检查库存是否充足public static bool IsInStock(this Product product, int requiredQuantity) {return product.Stock >= requiredQuantity;}
    }

    测试:

    // 创建商品实例
    var product = new Product {Name = "无线蓝牙耳机",Price = 299.99m,Stock = 50
    };// 调用扩展方法
    string description = product.GetDescription();
    bool isAvailable = product.IsInStock(30);Console.WriteLine(description); 
    // 输出:无线蓝牙耳机 - 价格:¥299.99,库存:50件
    Console.WriteLine(isAvailable ? "库存充足" : "库存不足"); 
    // 输出:库存充足

    关键点说明

    1. ​静态类与静态方法:

      • 所有扩展方法必须定义在 static class 中。
      • 方法本身必须是 static 的,且第一个参数用 this 关键字标记目标类型。
    2. ​访问权限:

      • 扩展方法只能访问目标类型的 ​**public 成员**​(如 Product 的 NamePrice)。
      • 无法访问 private 或 protected 成员。
    3. ​命名空间依赖:

      • 若扩展方法定义在命名空间 MyExtensions 中,使用时需通过 using MyExtensions; 引入。 

    关键规则

    1. 隐式传递实例

      • 调用扩展方法时,实例对象(如 product)会自动成为静态方法的第一个参数。
      • 你无需(也不能)手动传递该参数。
    2. 附加参数

      • 扩展方法定义中除第一个参数(this参数)外的其他参数,需在调用时显式传入。
      • 例如 IsInStock(30) 中的 30 对应方法定义中的 requiredQuantity

    补充示例:为系统自带类int拓展的方法:

    public static class IntExtensions {// 判断数字是否为偶数public static bool IsEven(this int number) {return number % 2 == 0;}// 计算数字的平方public static int Square(this int number) {return number * number;}
    }// 使用
    int num = 5;
    Console.WriteLine(num.IsEven()); // 输出 False
    Console.WriteLine(num.Square()); // 输出 25

    3. ​注意事项

    • 拓展方法优先级低于类的实例方法。        
    • 无法访问类型的私有成员。
    • 需通过命名空间引入拓展方法所在的类。

    三、什么是运算符重载?

            运算符重载(Operator Overloading)​允许为自定义类型重新定义运算符的行为​(如 +==> 等)。

    概念
    让自定义的类和结构体
    能够运用运算符 

    使用关键字
    operator

    特点
    1.一定是一个公共的静态方法
    2.返回值写在operator前
    3.逻辑处理自定义

    作用
    让自定义类和结构体对象可以进行运算
    注意
    1.条件运算符需要成对出现
    2.一个符号可以多次重载
    3.不能使用ref out 

    • 核心规则
      • 使用 operator 关键字定义。
      • 必须是 public static 方法。
    • 示例:为自定义的 Vector 类重载 + 运算符。
    • 语法:public static 返回类型 operator 运算符(参数列表)
    public class Vector {public int X { get; }public int Y { get; }public Vector(int x, int y) { X = x; Y = y; }public static Vector operator +(Vector a, Vector b) {return new Vector(a.X + b.X, a.Y + b.Y);}
    }// 使用
    Vector v1 = new Vector(1, 2);
    Vector v2 = new Vector(3, 4);
    Vector sum = v1 + v2; // sum.X=4, sum.Y=6

    四、运算符重载有啥用?怎么写?

    1. ​核心用途

    • 自然语义:让自定义类型支持直观的运算符操作(如复数相加、矩阵乘法)。
    • 提高可读性:用 a + b 替代 a.Add(b)

    2. ​编写步骤

    1. 定义运算符方法:指定运算符和操作数类型。
    2. 实现运算逻辑:返回计算结果

    语法:public static 返回类型 operator 运算符(参数列表)

    如下是一个用来计算温度的  “  + ”:

    public class Temperature {public double Celsius { get; }public Temperature(double celsius) { Celsius = celsius; }public static Temperature operator +(Temperature t1, Temperature t2) {return new Temperature(t1.Celsius + t2.Celsius);}
    }

    3. ​可重载的运算符

    运算符类型示例
    算术运算符+-*/%
    比较运算符==!=><>=<=
    转换运算符implicit 或 explicit

    4. ​注意事项

    • 必须成对重载(如重载 == 必须同时重载 !=)。
    • 不能重载赋值运算符(如 =+=)。
    • 避免过度使用导致逻辑混乱(如让 + 执行减法操作)。

    五、总结

    对比表:拓展方法 vs 运算符重载

    特性拓展方法运算符重载
    核心目的扩展现有类型的功能自定义类型支持运算符操作
    语法要求静态类 + this 参数public static operator
    适用场景工具方法、链式调用、LINQ数学运算、集合操作、语义化操作
    限制无法访问私有成员需成对重载、不能重载所有运算符

    一句话记忆

    • 拓展方法:“别人家的孩子,我来教他新技能。”
    • 运算符重载:“我的对象,加减乘除我说了算!”

    掌握这两个特性,让你的C#代码像自然语言一样直观!

    http://www.dtcms.com/wzjs/126825.html

    相关文章:

  1. 推广链接生成seo中国是什么
  2. 做关于网站的开题报告百度推广渠道户
  3. 如何建设赌博网站新软件推广
  4. 做三个月网站广告收入做品牌推广应该怎么做
  5. 网站建设报价单公司运营策划营销
  6. 分析网站统计对网络营销的价值优化加速
  7. 海口网站建设好网站制作公司
  8. 网站当前链接seo关键词分析
  9. 湖南建筑信息网哪里有网站推广优化
  10. 泰安网站建设招聘广告网站大全
  11. 网站备案幕布怎么做简述seo和sem的区别
  12. 惠州专业网站设计公司杭州seo网站建设
  13. yellow片观看完整版seo接单
  14. 外贸网站建设是做什么的台州seo网站排名优化
  15. 网站建设制作设计营销 上海seo诊断网站
  16. 校园网站建设简介阿里巴巴指数查询
  17. 聊城网站制作公司营业推广的方式有哪些
  18. 河南平台网站建设正规代运营公司排名
  19. 北京建设网站制作温州企业网站排名优化
  20. 贵阳58同城做网站公司有哪些大连百度推广公司
  21. 网站建设技能描述百度下载安装到手机
  22. 安徽建网站搜狗权重查询
  23. 阿里云服务器网站备案长沙企业网站设计
  24. 均安公司网站建设微信5000人接推广费用
  25. 黄河道网站建设公司网站推广投放
  26. 在线制作logo网站百度视频推广
  27. 网站留言板怎么做phpsql百度一下全知道
  28. linux 如何做网站网络口碑营销案例分析
  29. 网站建设项目延期验收申请八种营销模式
  30. 郑州营销型网站建设公司百度网盘下载电脑版官方下载