是否可以创建在创建对象时调用的扩展方法?

时间:2016-11-05 20:38:14

标签: c#

我无法修改我正在使用的对象,我需要一个方法,但我真的希望在创建对象时调用它。所以我认为扩展方法在这里会很好,但是我不知道它是否可能,但是,如果是,那么如何?

编辑:

我的静态类有一个我应该创建的主要对象:

EcuVersion Ecu;

我会从班上调用这个方法:

Ecu = ConvertAutodetect.Convert(rawData, Ecu, response);

平台将寻找Ecu对象。

我的方法将返回一个EcuVersion对象。除了很多其他东西之外,这个对象还包含一个集合,我只使用相应的集合:

ICollection<AutodetectStep> AutodetectSteps { get; set; }

AutodetectStep类有4个子节点,在其中一个子节点上,我需要在创建子节点时调用此扩展方法。

我必须创建许多子项并将它们添加到集合中,同样,我永远不会实例化我的对象,因为那里的一切都是静态的。

那么它是否适合使用工厂模式?

2 个答案:

答案 0 :(得分:3)

创建一个继承自您的类型

的类
public class YourObject
{
    public YourObject()
    {
        // some code
    }

    public void SomeMethod() {}
}

public class YourObjectWithExtraLogic : YourObject
{
    public YourObjectWithExtraLogic() : base()
    {
        // here add some extra logic
    }
}

然后,您可以在任何使用基类的地方使用具有额外逻辑的类。

public void Execute(YourObject obj)
{
    obj.SomeMethod();
}

var newObject = new YourObjectWithExtraLogic();
Execute(newObject);

通过这种方法,您需要注意不要违反“Liskov替代原则” 例如,您的额外逻辑不能破坏基类的预期行为。

答案 1 :(得分:2)

不,这是不可能的。如果它是非常不可靠的,因为它取决于您是否包含using的相关扩展名。这实际上是扩展方法的一般问题,但在这里它更糟糕,因为它永远不会导致编译时错误。

如何实现这一点的最佳方法可能是使用工厂模式间接构造对象并将该工厂注入代码中。但这仍然无法解决现有代码的问题。