我们可以将一个类、一个结构体、一个方法或接口分成具有相同类名的多个部分.cs放入一个文件并使用 partial 关键字。Partial 类最初是在 C# 2.0 中引入的。我们使用 specifc 关键字来制作称为 partial 的分部类。
C# 中的分部类与示例
部分类对于组织大型类非常有用,因为每当您有大型类时,这些大型类中的代码将被混淆,并且将缺乏清晰的组织。因此,为了保持代码的清晰组织,我们可以将 Larage 类拆分为小的 Parital 类。
分部类还允许多个开发人员同时处理类的不同部分而不会发生冲突。
我们有一个文件名 FruitFileOne.cs 和一个名为 Fruit 的部分类。它有一个整数变量 FruitPrice、一个字符串变量 FruitName 和一个布尔变量 FruitIsInMarket。我们有一个名为 Fruit 的构造函数,它分配 price & name & Isavailable 的值。
// FruitFileOne.cs
public partial class Fruit
{
// Fields (attributes or variables)
private int FruitPrice;
private string FruitName;
private bool FruitIsInSeason;
// Constructor
public Fruit(int price, string name, bool Isavailable)
{
FruitPrice = price;
FruitName = name;
FruitIsInSeason = Isavailable;
}
}
我们还有另一个名为 FruitFileTwo.cs 的文件具有相同的分部类,名为 Fruit。此类具有 GetFruit 方法。此方法将显示名为 FruitName & FruitPrice & FruitIsInSeason 的 fruit classes 变量的值
// FruitFileTwo.cs
public partial class Fruit
{
// Methods (functions or behaviors)
public void GetFruit()
{
Console.WriteLine("Fruit Name is: " + FruitName);
Console.WriteLine("Fruit Price is: " + FruitPrice);
Console.WriteLine("Fruit is avialable in season: " + FruitIsInSeason);
}
}
我们在程序或poroject的主要入口点下面,其中objFruit是Fruit类的一个实例,该类将三个参数20,Mango,true分别传递给价格& 名称和Isavailable FruitFileOne.cs
GetFruit 方法由实例 objFruit 调用,该实例在 FruitFileTwo.cs 中定义。
// Main Entry Point Of Project or Namespace
public class Program
{
public static void Main(string\[\] args)
{
Fruit objFruit = new Fruit(20,"Mango",true);
// Calling a method
objFruit.GetFruit();
}
}
using System;
public class Program
{
public static void Main(string\[\] args)
{
Fruit objFruit = new Fruit(20,"Mango",true);
// Calling a method
objFruit.GetFruit();
}
}
// FruitFileOne.cs
public partial class Fruit
{
// Fields (attributes or variables)
private int FruitPrice;
private string FruitName;
private bool FruitIsInSeason;
// Constructor
public Fruit(int price, string name, bool Isavailable)
{
FruitPrice = price;
FruitName = name;
FruitIsInSeason = Isavailable;
}
}
// FruitFileTwo.cs
public partial class Fruit
{
// Methods (functions or behaviors)
public void GetFruit()
{
Console.WriteLine("Fruit Name is:" + FruitName);
Console.WriteLine("Fruit Price is:" + FruitPrice);
Console.WriteLine("Fruit is avialable in season:" + FruitIsInSeason);
}
}
Fruit Name is:Mango
Fruit Price is:20
Fruit is avialable in season:True
分部类是在多个文件中定义的。partial 类的每个部分都必须使用 partial 关键字。
分部类的所有部分必须属于同一命名空间,并具有相同的类名。这确保了编译器可以将它们合并到一个类中。
分部类的成员(字段、属性、方法等)可以分布在定义类的文件中。这使开发人员可以在逻辑上将相关成员分组在一起。
如果在分部类的某一部分中使用特定的访问修饰符定义了成员,则该成员在所有其他部分中必须具有相同的访问修饰符。
其他修饰符,如 static、abstract、virtual 等,在分部类的不同部分可能会有所不同。但是,它们必须彼此兼容(例如,不能让类的一部分是静态的,而另一部分是非静态的)。
定义分部类各部分的顺序无关紧要。编译器将它们合并在一起以创建单个类。
如果分部类继承自基类或实现接口,则分部类的任何部分都可以包含继承/接口实现。但是,您不能在其他部分中重新定义基类或接口。
如果分部类的一部分包含字段初始值设定项(在其声明中初始化字段),则这些初始化将在其他部分的构造函数体执行之前执行。
分部方法在分部类中定义。一个分部类可以具有该方法的签名,并在另一个部分中为其提供实现。
我们有一个名为 FruitFileMethodOne.cs 的文件,其部分类名为 Fruit。此类有两个方法 GetFruitName() 和 **GetFruitPrice()。**这些方法包含一个名为 GetFruitName 的方法,该方法被定义为部分方法。
// FruitFileMethodOne.cs
public partial class Fruit
{
// methods with signature and body
partial void GetFruitName();
public void GetFruitPrice()
{
Console.WriteLine("Fruit Price is: 12");
GetFruitName();
}
}
我们还有另一个名为 FruitFileMethodTwo.cs 的文件,它有两个方法 GetFruitIsInMarket 和 GetFruitName。此方法 GetFruitName 是部分方法,也在 FruitFileMethodOne.cs 中定义。
// FruitFileMethodTwo.cs
public partial class Fruit
{
// Implementation of the partial method
public bool GetFruitIsInMarket() {}
partial void GetFruitName()
{
Console.WriteLine("Fruit Name is: Mango");
}
}
我们在程序或 poroject 的主要入口点下面,其中 objFruit 是 Fruit 类的一个实例**。**
GetFruit 方法由在 FruitFileTwo.cs 中定义的实例 objFruit 调用。
// Main Entry Point Of Project or Namespace
public class Program
{
public static void Main(string\[\] args)
{
Fruit objFruit = new Fruit();
// Calling a method
objFruit.GetFruitPrice();
}
}
using System;
public class Program
{
public static void Main(string\[\] args)
{
Fruit objFruit = new Fruit();
// Calling a method
objFruit.GetFruitPrice();
}
}
// FruitFileMethodOne.cs
public partial class Fruit
{
// methods with signature and body
partial void GetFruitName();
public void GetFruitPrice()
{
Console.WriteLine("Fruit Price is: 12");
GetFruitName();
}
}
// FruitFileMethodTwo.cs
public partial class Fruit
{
// Implementation of the partial method
public void GetFruitIsInMarket() { }
partial void GetFruitName()
{
Console.WriteLine("Fruit Name is: Mango");
}
}
Fruit Price is: 12
Fruit Name is: Mango