假设我有一个旧的类,日期为c#1.1,我想添加更多方法,字段。现在我使用2005,因此最合乎逻辑的解决方案是使用部分类。但是,我似乎必须在我定义文件的每个类中假装单词partial。
问题:
如果我无法更改旧文件中的类声明(向其添加部分词语),但仍想添加方法,我该怎么办?
答案 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)
这是我的订单:
答案 4 :(得分:0)
你无能为力。您不能编辑旧文件,因此无法将成员添加到此文件中。此外,您无法添加partial
关键字并将成员添加到另一个文件中。
唯一的出路可能是编写扩展方法(需要C#3.0)或创建派生类。两种解决方案都没有(真正)修改原始类。
答案 5 :(得分:0)
如果您使用的是VS2005并且无法修改旧课程,那么您真的无能为力。如果您使用的是VS2008,则可以使用扩展方法“模拟”添加新类,但2005年没有任何内容可以帮助您。
如果可能的话,你唯一可能的选择就是子类,并以这种方式添加新的方法。可能不会解决你遇到的问题。
为什么不能更改旧文件?这似乎相当极端。