面向对象之封装九

拓展方法

一.拓展方法基本概念

概念:为现有非静态变量类型添加新方法

作用:

1.提升程序拓展性

2.不需要在对象中重新写方法

3.不需要继承来添加方法

4.为别人封装的类型写额外的方法

特点:

1.一定是写在静态类中

2.一定是个静态函数

3.第一个参数为拓展目标

4.第一个参数用this修饰

二.基本语法

访问修饰符 static 返回值 函数名(this 拓展类名 参数名,参数类型 参数名,参数类型 参数名……)

三.实例

1
2
3
4
5
6
7
8
9
10
static class Tools{
public static void SpeakValue(this int value)
//为int类型拓展一个成员方法
//而成员方法是需要实例化对象后才能使用的
//value就代表使用该方法的实例化对象
{
//拓展的方法的逻辑
Console.WriteLine("为int类型拓展的方法"+value);
}
}

四.使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
namespace 语法知识
{
static class Tools{
public static void SpeakValue(this int value)
//为int类型拓展一个成员方法
//而成员方法是需要实例化对象后才能使用的
//value就代表使用该方法的实例化对象
{
//拓展的方法的逻辑
Console.WriteLine("为int类型拓展的方法"+value);
}
public static void SpeakStringInfo(this string str,string str2,string str3){
Console.WriteLine("为string类型拓展的方法");
Console.WriteLine("调用方法的对象"+str);
Console.WriteLine("传的参数为"+str2+str3);
}
}
internal class Program
{
static void Main(string[] args)
{
int i =10;
i.SpeakValue();
//可以点出来使用了,它不需要参数(为什么??)
//因为我们this后面跟着的是拓展类名(代表为谁拓展这一个方法)和参数名(这个参数名代表的就是我实例化的对象是谁,在这个例子中所指的正是i,(也是value),相当于实例化对象i调用了这个拓展方法。
string str="000";
str.SpeakStringInfo("111","222");
}
}
}

说白了,拓展方法就是为那些无法修改的静态类新增加一些成员方法,这样即不用动大手术,又可以起到作用,相当于“打补丁”了。

五.为自定义的类型拓展方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static class Tools{
public static void Fun3(this Test t){
Console.WriteLine("为Test拓展的方法");
}
}
class Test{
public int i=10;
public void Fun1(){
Console.WriteLine("123");
}
public void Fun2(){
Console.WriteLine("456");
}
}
//主函数中
Test t= new Test();
t.Fun3();
//如果重名了怎么办?——拓展方法和成员方法重名,会使用成员方法,拓展方法作废。

面向对象之封装九
https://gaster44.github.io/2023/12/23/面向对象之封装九/
作者
huangjinhong
发布于
2023年12月23日
许可协议