局部类与扩展方法

| 我没有使用这两种方式扩展类或针对类创建扩展方法的经验。通过寻找其他人的工作,我在这里有一个问题。 我看到人们在使用Parital类来扩展项目中的实体类。同时,在同一项目中,还有另一个文件夹,其中包含许多对实体类的扩展方法。 这样做对吗?我的意思是这两种方式都很好。您能给我一些实际的练习,当我想扩展课程时如何从他们中选一个吗?     
已邀请:
将决定您要使用部分类还是扩展方法的一些差异是 局部类 仅适用于同一项目/程序集中的类 目标类别必须标记为局部 有权访问目标类别的字段和受保护的成员 目标必须是一个类实现 扩展方式 可以应用于其他汇编中的类 必须是静态的,只能访问Target类的公共成员 扩展目标可以是具体类型,也可以是抽象类型或接口     
部分类应在代码生成方案中使用。 由于生成的文件随时都可能被覆盖,因此可以使用部分类写入未生成的文件。 此外,零件仅在它们属于同一装配体的情况下才起作用-它们不能越过装配体边界。 如果这些不是您的约束,则可以并且应该使用扩展方法-当然,在考虑其他可能性(例如继承和适合性的组合)之后。     
您可以在NULL实例上使用扩展方法,但不能使用(部分类或其他类的)实例方法。这是扩展方法实际上是静态的结果。     
当我需要一个类来实现接口时,我使用部分方法,但是类代码是自动生成的(VS使用部分类为Web服务和EF模型生成代码)。 当我要添加到该类型的新方法适用于该类型的任何值时,我将使用扩展方法。 (好的示例:int.IsEven(),string.IsEmpty();不好的示例:int.IsOldEnoughToDrive(),string.IsLastName())。     
您可以在正在开发的项目中使用部分类,而扩展方法也可以用于扩展您也没有源代码的项目。     
仅当两个文件都在同一项目中时,Partial才起作用,并且您可以访问该类的私有成员和受保护成员。 扩展方法只是静态方法,不能访问私有成员。 因此,如果要访问私有成员和受保护成员,则只有部分解决该问题的方法(如果没有),那么要添加的方法是否应该在要使用类的任何地方都可见?如果是,则使用部分扩展;如果否,则使用某种扩展,请使用扩展方法。 顺便说一句,如果第一类不是由某个工具生成的,则可以在其中编写函数,除非使用partial;)。 希望这可以帮助     
如果选择局部类路由,但发现您正在重复相同的代码,请切换到扩展方法。 例如,我有许多生成的类,它们的方法返回“ 0”数据。我想以某种方式扩展每个类,以便我可以选择接收格式为“ 1”的数据。 我在这里有一个一般性的要求,就是将“ 0”数据转换成“ 1”。在这种情况下,扩展方法比写多个
partial class
方法更有效:
public static class ExtensionMethods
{
    public static IEnumerable<MediaItem> ToMediaItems(this IEnumerable<Track> tracks)
    {
        return from t in tracks
               select new MediaItem
               {
                   artist = t.Artist,
                   title = t.Title,
                   // blah blah
               };
    }
}
这给了我以下选择:
var data = Playlist.Tracks.ToMediaItems();
var data = Podcast.Tracks.ToMediaItems();
// etc..
    
当您想扩展生成的类时,部分类很有用。这样,您可以将代码编写到一个文件中,然后/如果需要重新生成类的另一个\'part \',则可以安全地完成该操作,因为该代码文件没有更改。     
Partial Class - 
在两个或多个源文件上拆分类或结构或接口的定义
Extension Method  
扩展方法使您可以将方法“添加”到现有类型,而无需创建新的派生类型,重新编译或修改原始类型     

要回复问题请先登录注册