0.知识背景
局部类型适用于以下情况:
- 类型特别大,不宜放在一个文件中实现。
- 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
- 需要多人合作编写一个类
局部类型的限制:
- 局部类型只适用于类、接口、结构,不支持委托和枚举。
- 同一个类型的各个部分必须都有修饰符 partial。
- 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。
- 一个类型的各个部分必须被同时编译。
局部类型的注意点:
- 关键字partial是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。
- 局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许我们将他们放在同一文件中。
1. 代码结构介绍 & 校验的功能
- 4个不同目录下面的partial 类,校验是否可以都被调用到不同类中独有的方法(Fun() 、Fun2()、Fun3()、Fun5() )
- 在一个partial 类(SmallClass)中定义变量int,校验其他类中是否可以调用改变量
2.代码部分
AnotherClass.cs
using System.Reflection;
namespace ConsoleDeomAlien.MultiClass
{
public partial class NormalClass
{
private const string name3 = "alien3";
public void Fun3()
{
string methodName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine($"{className}----{methodName}-----{name3}\n");
}
}
}
NormalClass.cs
using System.Reflection;
namespace ConsoleDeomAlien.MultiClass
{
public partial class NormalClass
{
private const string name = "alien";
string className = MethodBase.GetCurrentMethod().ReflectedType.Name;
public void Fun()
{
string methodName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine($"{className}----{methodName}-----{name}\n");
Console.WriteLine($"{className}----{methodName}-----{age}\n");
}
}
}
SpecialClass.cs
using System.Reflection;
namespace ConsoleDeomAlien.MultiClass
{
public partial class NormalClass
{
private const string name2 = "alien2";
public void Fun2()
{
string methodName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine($"{className}----{methodName}-----{name2}\n");
}
}
}
SmallClass.cs
using System.Reflection;
namespace ConsoleDeomAlien.MultiClass
{
public partial class NormalClass
{
private const string name5 = "alien5";
public int age = 18;
public void Fun5()
{
string methodName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine($"{className}----{methodName}-----{name5}\n");
}
}
}
MainClass.cs
using ConsoleDeomAlien.MultiClass;
namespace ConsoleDeomAlien
{
public class MainMethod
{
public static void Main()
{
var cc = new NormalClass();
cc.Fun();
cc.Fun2();
cc.Fun3();
cc.Fun5();
cc.age = 22;
Console.WriteLine($"Main ---------{cc.age}");
Console.ReadKey();
}
}
}
3.讲解部分
- 每个partial 文件可以共享内容、共同组成一个类的前提是,命名空间、类名都一摸一样,如下所示。
namespace ConsoleDeomAlien.MultiClass
{
public partial class NormalClass
{
}
}
-
只要上面条件符合、发现文件在不同路径下,都可以实现共享机制。
-
既然这个特殊的大类NormalClass需要多个文件共同维护,那每个文件肯定包含一些独有的方法。但是,只要初始化一次这个类,每个文件中独有的方法都可以被调用到
-
在SmallClass.cs 文件中定义了age 这个变量,但在NormalClass.cs文件中,也同样调用到了这个变量age。且在main方法中修改这个变量之后,这个值也变化了。
-
每个类中定义的私有变量(private const string name)可供该类中的方法单独使用,方便与其他文件中的变量隔离。这样调用不同的方法,可以获取不同的值了。
-
在NormalClass.cs中定义的变量(string className),可以获取到调用该方法对应的class 名称.且该变量可共其他的partial 文件访问到。文章来源:https://www.toymoban.com/news/detail-676577.html
string className = MethodBase.GetCurrentMethod().ReflectedType.Name;
- 在每个方法中定义的局部变量(methodName),可以获取到该方法的名称,且这种方法名的获取方式,只能在方法中获取,在方法外不能获取到。
string methodName = MethodBase.GetCurrentMethod().Name;
4.最终输出内容
文章来源地址https://www.toymoban.com/news/detail-676577.html
到了这里,关于C#---第二十: partial修饰类的特性及应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!