【问题标题】:Partial Method Inside Abstract Class (C#)抽象类中的分部方法 (C#)
【发布时间】:2010-10-19 18:31:27
【问题描述】:
我正在创建一个可以在 LINQ to SQL 类的部分类中继承的抽象类。 LINQ to SQL 类包含一堆内置的分部方法。有没有一种方法可以实现抽象类中的一个或多个部分方法?我知道部分方法只能包含在部分类或结构中。我相信肯定有其他方法可以做到这一点。
这里有更多细节:
- 我可能有一个名为 News 的数据库表。如果我创建一个包含此表的 LINQ to SQL dbml 文件,自动生成的代码会为 News 生成一个部分类。
- 这个分部类包含几个分部方法。
- 我正在构建一个类,其中包含我想在我的所有 LINQ to SQL 类中使用的几种方法。
- 这些方法之一是添加到每个 LINQ to SQL 类的部分方法。我有一个共同的身体可用于这种方法。与其将这个方法添加到每个部分类中,我正在寻找一种方法来创建它一次并使用我的基类继承来继承它。
希望这有助于解释更多。
【问题讨论】:
标签:
linq-to-sql
inheritance
abstract-class
implementation
partial-classes
【解决方案1】:
我想我明白你想做什么,但如果不明白,请告诉我。您可以使您的抽象基类部分化并将您想要的实现拉到该类中。或者,您可以使用抽象类并封装您希望子类可以访问的功能。
【解决方案2】:
部分方法不能通过继承使用。您可以将常规方法添加到抽象基类,但它们不会自动与部分方法声明“配对”。所以不行。当然,您可以简单地将部分方法实现调用到基类中。
另请注意,如果通用代码与审计(谁/何时)相关,您也可以通过覆盖DataContext 的SubmitChanges 方法并调用GetChangeSet 来做到这一点:
public override void SubmitChanges(ConflictMode failureMode)
{
ChangeSet delta = GetChangeSet();
//... use delta.Updates, delta.Inserts and delta.Deletes
base.SubmitChanges(failureMode);
}
最后,请注意,您还可以为 dbml (like so) 中的所有实体指定一个公共基类;您不必在每个部分类中手动完成。