对于所有部分类的实例化,我们是否需要关键字partial?

时间:2009-04-17 17:17:33

标签: c# .net

假设我有一个旧的类,日期为c#1.1,我想添加更多方法,字段。现在我使用2005,因此最合乎逻辑的解决方案是使用部分类。但是,我似乎必须在我定义文件的每个类中假装单词partial。

问题:

如果我无法更改旧文件中的类声明(向其添加部分词语),但仍想添加方法,我该怎么办?

6 个答案:

答案 0 :(得分:10)

嗯,首先,是的,您确实需要在同一名称空间下对所有涉及的类使用partial关键字。这将告诉编译器这些是将放在一起的同一个类的部分。

现在,如果你真的无法改变旧类,你可以做的一件事就是继承你的旧类:

public class NewClass : OldClass

...因此,您可以扩展OldClass的功能。

你也可以选择只使用旧类某种包装器作为属性/属性:

public class NewClass
{
    public OldClass MyClass { get; set; } //.NET 3.5 / VS2008

    private OldClass _oldClass; //.NET 2.0 / VS2005
    public OldClass MyClass
    {
       get { return _oldClass; }
       set { _oldClass = value; }
    }
}

......甚至是通用的:

public class NewClass<T> where T: OldClass //applicable in both versions

扩展方法的建议也有效:

public void NewMethod1(this OldClass, string someParameter){}  //available only in .NET 3.5/VS2008

答案 1 :(得分:3)

你应该从中衍生出来。

答案 2 :(得分:1)

嗯,总有扩展方法。

答案 3 :(得分:0)

这是我的订单:

  1. 是否可以使用扩展方法 您?如果你在VS2005,可能 不是。
  2. 然后,你可能必须继承 从该类中添加更多方法。
  3. 如果课程被密封,那么你 需要把你的课包装到另一个 有“组成模式”的课程。

答案 4 :(得分:0)

你无能为力。您不能编辑旧文件,因此无法将成员添加到此文件中。此外,您无法添加partial关键字并将成员添加到另一个文件中。

唯一的出路可能是编写扩展方法(需要C#3.0)或创建派生类。两种解决方案都没有(真正)修改原始类。

答案 5 :(得分:0)

如果您使用的是VS2005并且无法修改旧课程,那么您真的无能为力。如果您使用的是VS2008,则可以使用扩展方法“模拟”添加新类,但2005年没有任何内容可以帮助您。

如果可能的话,你唯一可能的选择就是子类,并以这种方式添加新的方法。可能不会解决你遇到的问题。

为什么不能更改旧文件?这似乎相当极端。