代码之家  ›  专栏  ›  技术社区  ›  Sasha

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

  •  0
  • Sasha  · 技术社区  · 15 年前

    假设我有一个旧类,它的日期是C 1.1,我想向它添加更多的方法和字段。现在我使用的是2005,因此最合乎逻辑的解决方案是使用分部类。然而,在我定义它的文件中,似乎我必须假装单词偏袒了每个类。

    问题:

    如果我不能更改旧文件中的类声明(向其中添加部分字),但仍要向其中添加方法,该怎么办?

    6 回复  |  直到 15 年前
        1
  •  10
  •   Jon Limjap    15 年前

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

    现在,如果您确实不能更改旧类,您可以做的一件事是继承旧类:

    public class NewClass : 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
    
        2
  •  3
  •   Darin Dimitrov    15 年前

    你应该从中得出结论。

        3
  •  1
  •   Pontus Gagge    15 年前

    好吧,总是有扩展方法的。

        4
  •  0
  •   J.W.    15 年前

    这是我点的菜:

    1. 扩展方法是否适用于 你呢?如果你在VS2005,那可能 不是。
    2. 那么,你可能必须继承 从该类添加更多方法。
    3. 如果课程是密封的,那么你 需要将你的班级包装成另一个 用“构图模式”分类。
        5
  •  0
  •   Daniel Brückner Pradip    15 年前

    你不能做任何事。不允许编辑旧文件,因此无法向此文件添加成员。此外,您不能添加 partial 关键字并将成员添加到另一个文件中。

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

        6
  •  0
  •   JaredPar    15 年前

    如果您使用的是VS2005,并且不能修改旧类,那么实际上您什么也做不了。如果您使用的是VS2008,那么您可以使用扩展方法来“模拟”添加新类,但是2005年没有任何方法可以帮助您。

    您唯一可能的选择是在可能的情况下真正地子类化,并以这种方式添加新的方法。可能不会解决你的问题。

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