展开

关键词

C# 扩展静态方法

扩展方法 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种静态方法,但可以像扩展类型上的实例方法一样进行调用。 连续点的方法一般都是静态方法,而且官方提供了静态方法扩展的可操作性,所以我们可以实现一个自定义的扩展方法。 而加密一般都为字符串,所以只需要在字符串上进行扩展即可。 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定方法操作的类型。 参数前面是此修饰符。 而所谓的静态类型并没有什么用,只是方便你用来区分扩展方法是那个范围的。 当然你在使用扩展方法时,需要引用当前静扩展函数所在的命名空间才行。 一些扩展方法的例子 字符串相关的扩展方法 namespace BlogSite.CommonLib { public static class StringExtension {

33830

C#扩展方法解析

1.扩展方法的基本原则:       (1).C#只支持扩展方法,不支持扩展属性、扩展事件、扩展操作符等。       (3).C#编译器查找静态类中的扩展方法时,要求这些静态类本身必须具有文件作用域。       (4).C#编译要求“导入”扩展方法。 (静态方法可以任意命名,C#编译器在寻找方法时,需要花费时间进行查找,需要检查文件作用域中的所有的静态类,并扫描它们的所有静态方法来查找一个匹配)       (5).多个静态类可以定义相同的扩展方法。 二.扩展方法原理解析:   “扩展方法”是C#独有的一种方法,在扩展方法中会使用ExtensionAttribute这个attribute。     C#一旦使用this关键字标记了某个静态方法的第一个参数,编译器就会在内部向该方法应用一个定制的attribute,这个attribute会在最终生成的文件的元数据中持久性的存储下来,此属性在System.Core

48170
  • 广告
    关闭

    腾讯云开发者社区系列公开课上线啦!

    Vite学习指南,基于腾讯云Webify部署项目。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 扩展方法 白话总结

    我们在变成的时候时常遇到这样的问题,new了一个系统内的对象之后,我们想要对该对象有一个方法可是却点不出来,说明该对象本身没有声明该方法,可是微软又不允许我们去该对象的代码,怎么办? 在C# 3.0  微软加入了扩展方法,那么扩展方法怎么用呢? 用扩展方法可以实现 用扩展方法,首先需要声明一个静态类,然后在这个静态类里面声明一个静态方法,静态方法里面的第一的位置,要this int i ,这样用的 public static class static int IntAdd5(this int i) { return i + 5; } } 这里的第一个不是参数,而是你想要扩展的那个类型的名称 ,换句话说,你想要扩展哪个类型,这里只要扩展哪个类型就行了。

    38590

    C#中的扩展方法

    扩展方法是C#3.0引入的新特性,使用它,可以在不修改某一类的代码的情况下,实现该类方法扩展。 为一个类添加扩展方法,需要三个要素: 1.扩展方法所在的类为静态类 2.扩展方法本身要为静态方法 3.扩展方法的第一个参数要用关键字this,指向要扩展的类 下面请看一个实例: 这个扩展方法是服务于int类型的,返回它自己的2倍; 使用方法也很简单: a为8,调用扩展方法以后,也看到了正确返回结果18 实际上也可以用 扩展方法,也可以传入参数: 使用的时候,传入对应的参数即可 这种灵活的方式,可以让我们的开发更便捷,但是不要滥用扩展方法,当扩展方法与类原始的方法重名时,原始方法的优先级高于扩展方法, 并且对于系统类,不要随便添加扩展方法

    9720

    C#进阶学习--扩展方法(this)

    一.扩展方法的作用 1.扩展密封类中的方法和属性 示例 假设又有一个第三方的类,如下: public sealed class Person { public string ,输出当前类的Name,由于Person类是密封类,所以不能被继承,这时候就可以使用扩展方法 public static class PersonExtened { public (this Person person) { Console.WriteLine(person.Name); } } 这时即可直接调用该扩展方法 这时候就可以用扩展方法实现,实现方式如下: public static class CalcFunExtend { public static int min(this ,即可同步实现减法,乘法与除法的功能,如下图所示: [e01f0c3272be871ffe9c0cbc74e1eafa.png] 总结 1.扩展方法的第一个参数必须要,并且必须用this修饰 2.扩展方法只能定义在静态类中

    12020

    C#神奇的扩展方法

    以前总听说扩展方法扩展方法,只是听说是C#3.0后出来的新玩意,也仅仅是知道Linq中用到好多的扩展方法,但是他究竟是个什么东东,怎么用它,用它的好处是什么,总是模模糊糊,那么我们今天就尝试揭开它神秘的面纱 我们现在看到每个方法都和声明它的类关联,但是C#3.0的扩展方法的特性扩展了这个边界,允许编写和声明它的类之外的类关联的方法。 ,该方法返回三个数据的平均值.那么我们有几种方法可以实现这个增加的功能. 如果我们有源代码,那么我们可以直接修改这个类,将方法直接添加进去. 如果我们不能访问代码,或该类是密封的,或有其它设计原因使这些方法不能工作,那么我们不得不在另外一个类中使用该类的公有可用成员编写一个方法. 例如,我们可以编写一个下面代码中这样的类:

    52750

    C#扩展方法原理及其使用

    以下为主要内容: 什么是扩展方法 扩展方法原理及自定义扩展方法 扩展方法的使用及其注意事项 2、什么是扩展方法 一般而言,扩展方法为现有类型添加新的方法(从面向对象的角度来说,是为现有对象添加新的行为 扩展方法是静态的,它的使用和其他实例方法几乎没有什么区别。常见的扩展方法有Linq扩展、有IEnumerable扩展等。 不得不说.NET在这方面做得很精致,很让人钦佩,那么接下来我们来看看扩展方法的原理 3、扩展方法原理及自定义扩展方法 首先我们,先看看如何自定义扩展方法 ? 4、扩展方法的使用及其注意事项 扩展方法虽然很好用,但是如果我们扩展的对象发生了版本迭代,则会增加扩展方法失效的风险。 一下是在使用扩展方法时需要注意的地方 扩展方法与该类型中定义的方法具有相同的签名,编译器总是绑定到该实例方法,也就是扩展方法永远不会被调用,这也就回答了题目刚开始所说的问题。

    78620

    C# TextBox 扩展方法数据验证

    创建TextBox类型的扩展方法       引用MSDN的解释:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。       注意:扩展方法是在非嵌套、非泛型静态类内部定义的     2. textBox)表面看不太好理解,为什么一个对象后面带一个参数,其实C#编译器为我们做了很多工作,在这里实质为faild.Invoke(textBox),这样看还好理解委托是个类型,通过faild的委托对象来调用该委托所注册的方法

    45010

    c# Lambda扩展

    扩展类 1 public static class LinqExtensions 2 { 3 ///

    4 /// 创建lambda

    30630

    C# this关键字(给底层类库扩展成员方法)

    本文参考自唔愛吃蘋果的C#原始类型扩展方法—this参数修饰符,并在其基础上做了一些细节上的解释 1、this作为参数关键字的作用 使用this关键字,可以向this关键字后面的类型添加扩展方法,而无需给其创建新的派生类型 扩展方法是一种特殊的静态方法,但可以像实例方法那样调用。 ,所以只能通过this关键字对其进行扩展,也就是完善类方法的重载方法。 ,但是需要注意,这里的类必须就静态类,扩展方法必须是静态方法,原因如下: (1)、这里传入的需要扩展的string类型 ? 实际上,扩展方法无法访问它们所扩展的类型中的私有变量,不信你可以试试在扩展方法中访问string的私有成员!!!

    56170

    扩展方法

    扩展方法当然不能破坏面向对象封装的概念,所以只能是访问所扩展类的public成员。 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 1.this扩展方法  必须是静态类才可以添加扩展方法 :声明扩展方法的步骤:类必须是static,方法是static 实例1、给string 类型增加一个Add方法,该方法的作用是给字符串增加一个字母 a 第一步:声明扩展方法 //声明扩展方法 //扩展方法必须是静态的(是否有参数),Add有三个参数:this 必须有,string表示我要扩展的类型,stringName表示对象名 。 //使用扩展方法的时候必须保证扩展方法类已经在当前代码中using namespace 扩展方法 { //扩展方法必须是静态的 public static class StringHelper

    25910

    C# double 好用的扩展

    本文提供一个数学扩展,让大家可以简单使用到 double 判断 在开始看本文之前,希望大家是知道计算机是如何存放 double 和 double 精度问题原因。 如果大家不知道这个的话,会比较难理解为什么需要使用扩展方法来判断。 如果只是想用这个类,请把到文章最后面,复制代码到自己项目。 a == b 如果你问 Resharper 建议修改为怎样,他会告诉你,修改为这样 Math.Abs(a-b)<一个很小的数 原因就是 double 精度问题,虽然你觉得使用两个相同的方法计算出来的数值在数学计算上是相等的 虽然可以直接把 0 作为 double 判断,但是实际上这个判断是不建议的,因为有更好的方法。 mathnet/mathnet-numerics/blob/master/src/Numerics/Precision.cs 复制 ///

    /// Double 的扩展

    5420

    C# double 好用的扩展

    本文提供一个数学扩展,让大家可以简单使用到 double 判断 在开始看本文之前,希望大家是知道计算机是如何存放 double 和 double 精度问题原因。 如果大家不知道这个的话,会比较难理解为什么需要使用扩展方法来判断。 如果只是想用这个类,请把到文章最后面,复制代码到自己项目。 a == b 如果你问 Resharper 建议修改为怎样,他会告诉你,修改为这样 Math.Abs(a-b)<一个很小的数 原因就是 double 精度问题,虽然你觉得使用两个相同的方法计算出来的数值在数学计算上是相等的 虽然可以直接把 0 作为 double 判断,但是实际上这个判断是不建议的,因为有更好的方法。 mathnet/mathnet-numerics/blob/master/src/Numerics/Precision.cs 复制 ///

    /// Double 的扩展

    38510

    C#深拷贝扩展方法(引用类型利用序列化实现深拷贝)

    } catch { return null; } } 注意: 1.上述方法

    18530

    C#语言入门详解-18扩展方法和一些参数的使用

    http://mpvideo.qpic.cn/0bf2yyaamaaagaapsulbizpvbrwda3daabqa.f10002.mp4?dis_k=0e2...

    8020

    1-扩展方法

    Console.WriteLine(myNum); 8 } 9 } 10 11 public static class ExpandInt 12 { 13 //扩展方法必须为静态方法 , 或一个类或集合包含扩展方法【这里我也不太懂,嘿嘿】。 "的调用换成了ExpandInt::AddToOldNum(int32,int32)静态方法的调用,这就是扩展方法的本质所在了。 3.总结 我们真的扩展了Int32类的实例方法了吗?没有,编译器帮我们披了一层外衣, 把对“实例方法”的调用在编译时期改变成了静态类中的静态方法的调用,所以扩展方法是一种编译时技术。 当扩展方法和实例方法签名相同时,实例方法优先使用。

    354100

    C#操作操作类库五(字符串的常用扩展方法

    与string.Length不同的是,该方法将中文作 2 个字符计算。 将形如 10.1MB 格式对用户友好的文件大小字符串还原成真实的文件大小,单位为字节。 str"></param>     /// <returns></returns>     /// <remarks>     /// 不同于String.IsNullOrEmpty(string),此方法会增加一步 与string.Length不同的是,该方法将中文作 2 个字符计算。

    39710

    linq to sql 扩展方法

    1、DataContext扩展方法 public static class DataContextExentions { ///

    /// 打开连接 Regex s_withNoLockRegex = new Regex(@"(] AS [td+])", RegexOptions.Compiled); } } 2、DataContext扩展方法支持分页 /// /// DataContext扩展方法 /// public static class DataContextExtends { /// /// ExecuteQuery方法扩展,将对象以redader方式转换为实体 /// /// <typeparam name="T"></typeparam ExecuteQuery<T>(dataContext, query, 1, query.Cast<T>().Count()); } /// /// ExecuteQuery方法扩展

    19800

    C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法

    扩展方法, 首先是一个方法, 他可以用来扩展已定义类型中的方法成员. (i, "This value is "); 25 Console.ReadKey(); 26 } 27 } 并不是所有的方法都可以用作扩展方法, 我们需要考察它是否符合下列扩展方法的定义规则 : (1)扩展方法必须在一个非嵌套, 非泛型的静态类中定义 (2)它至少要有一个参数 (3)第一个参数必须加上this关键字作为前缀(第一个参数类型也称为扩展类型, 即指方法对这个类型进行扩展) (4) 编译器会检查所有导入的命名空间和当前命名空间中的扩展方法, 并将变量类型匹配到扩展类型. 从编译器发现扩展方法的过程来看, 方法调用的优先级别顺序为: 类型的实例方法-->当前命名空间下的扩展方法-->导入命名空间的扩展方法.

    500100

    String 的扩展方法

    我就是这么强大'; }; let greet = `${sayHello()} 哈哈哈哈`; console.log(greet); // 哈哈哈哈 追不到我吧 我就是这么强大 哈哈哈哈 ​ 实例方法 // true ​ 实例方法:repeat() repeat方法表示将原字符串重复n次,返回一个新字符串 'x'.repeat(3) // "xxx" 'hello'.repeat(2)

    16820

    相关产品

    • 云原生分布式云中心

      云原生分布式云中心

      云原生分布式云中心(Tencent Kubernetes Engine Distributed Cloud Center, TDCC)面向多云多集群场景的应用管理平台,支持将云原生化的应用扩展到分布式

    相关资讯

    热门标签

    扫码关注腾讯云开发者

    领取腾讯云代金券