C#中将一个类的内容分布到多个文件内的方法

4084810384cc50b88a10487e5746ab8c.jpeg我们可以将一个类、一个结构体、一个方法或接口分成具有相同类名的多个部分.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 关键字。

同Namespace,类名:

分部类的所有部分必须属于同一命名空间,并具有相同的类名。这确保了编译器可以将它们合并到一个类中。

获取和更改字段:

分部类的成员(字段、属性、方法等)可以分布在定义类的文件中。这使开发人员可以在逻辑上将相关成员分组在一起。

辅助功能修饰符必须匹配:

如果在分部类的某一部分中使用特定的访问修饰符定义了成员,则该成员在所有其他部分中必须具有相同的访问修饰符。

修饰符可能有所不同:

其他修饰符,如 static、abstract、virtual 等,在分部类的不同部分可能会有所不同。但是,它们必须彼此兼容(例如,不能让类的一部分是静态的,而另一部分是非静态的)。

定义的顺序无关紧要:

定义分部类各部分的顺序无关紧要。编译器将它们合并在一起以创建单个类。

一部分可以继承:

如果分部类继承自基类或实现接口,则分部类的任何部分都可以包含继承/接口实现。但是,您不能在其他部分中重新定义基类或接口。

字段初始值设定项:

如果分部类的一部分包含字段初始值设定项(在其声明中初始化字段),则这些初始化将在其他部分的构造函数体执行之前执行。

C 语言中的分部方法#

分部方法在分部类中定义。一个分部类可以具有该方法的签名,并在另一个部分中为其提供实现。

我们有一个名为 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

如果你喜欢我的文章,请给我一个赞!谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值