在c#中给对像添加扩展方法_那java有没有办法添加 多谢_C#中的partial,this关键字以及扩展方法...

NO one

partial:C#允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。

局部类型适用于以下情况:

(1) 类型特别大,不宜放在一个文件中实现。

(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。

(3) 需要多人合作编写一个类。

局部类型的限制:

(1) 局部类型只适用于类、接口、结构,不支持委托和枚举。

(2) 同一个类型的各个部分必须都有修饰符 partial。

(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。

(4) 一个类型的各个部分必须被同时编译。

代码示例:

// partial1.cs:

namespace CodeSamples

{

public partial class MyPartialClass

{

public int method1(int x)

{

Console.WriteLine(x);

return 0;

}

}

}

// partial2.cs

namespace CodeSamples

{

public partial class MyPartialClass

{

public void method2(double x)

{

Console.WriteLine(x);

}

}

}

// program.cs

static void Main(string[] args)

{

MyPartialClass obj = new MyPartialClass();

obj.method1(11);

obj.method2(34.23);

Console.Read();

}

NO Two

C#扩展方法

扩展方法的的一些概念:

扩展方法是你能够向现有类型添加方法,而无需创建新的派生类型、重新编译或以其它方式修改原始类型;扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用,对于C#而言,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异;扩展方法虽然被定义为静态方法,但它们是通过实例方法语法进行调用的,它们的第一个参数指定该方法作用于哪个类型,并且该参数以this修饰符为前缀,仅当你使用using指令将命名空间显式导入到源代码之后,扩展方法才位于范围中;

代码示例1:

namespace ExtensionMethods

{

public static class MyExtensions

{

public static int WordCount(this String str)

{

return str.Split(new char[] { ' ', '.', '?' },

StringSplitOptions.RemoveEmptyEntries).Length;

}

}

}

可使用using指令将WordCount扩展方法至于范围内:

using ExtensionMethods;

而且可以使用以下语法从应用程序中调用该扩展方法:

string s = "Hello Extension Methods";

int i = s.WordCount();

解答心中的疑惑点:在代码中,可以使用实例方法语法调用该扩展方法,但是编译器生成的中间语言会将转换为对静态方法的调用。因此,并未真正违反封装原则。扩展方法只能是访问所扩展类的public成员

为了方便理解:在看一个例子-->扩展方法的目的就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型。为数据类型的添加一个方法的理解:一般来说,int数据类型有个Tostring的方法,就是把int 数据转换为字符串的类型,比如现在我们想在转换成字符串的时候还添加一点东西,比如增加一个字符 a .那么之前的Tostring就不好使了,因为它只是它我们的int数据转换为string类型的,却并不能添加一个字母 a.所以这就要用到所谓的扩展方法了。

在编译时绑定扩展方法:

可以使用扩展方法来扩展类或接口,但不能重写扩展方法,与接口或类方法具有相同名称和签名的扩展方法永远不会被调用;编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。换句话说,如果某个类型具有一个名为 Process(int i) 的方法,而你有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。

扩展方法:

1.方法所在的类必须是静态的

2.方法也必须是静态的

3.方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。

4.在第一个参数前面还需要有一个this关键字

参考:https://blog.csdn.net/zyh_1988/article/details/51103612

https://www.cnblogs.com/rinack/p/5695067.html

No Three

C#中的this关键字

1.this代表当前类的实例对象

2.用this串联构造函数

namespace Demo

{

public class Test

{

public Test()

{

Console.WriteLine("无参构造函数");

}

// this()对应无参构造方法Test()

// 先执行Test(),后执行Test(string text)

public Test(string text) : this()

{

Console.WriteLine(text);

Console.WriteLine("有参构造函数");

}

}

class Program

{

static void Main(string[] args)

{

try

{

Test test = new Test("张三");

}

catch (Exception ex)

{

Console.WriteLine(ex);

}

finally

{

Console.ReadLine();

}

}

}

}

3.应用于某一类型(原始类型或自定义)的扩展方法

4.通过this实现索引器,可用于优化程序性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值