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

本文关键字:调用 扩展 方法 创建对象 创建 是否 | 更新日期: 2023-09-27 18:16:42

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

编辑:

我的静态类有这个主对象,我应该创建:

EcuVersion Ecu;

我将从我的类中调用这个方法:

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

,平台将查找Ecu对象。

我的方法将返回一个EcuVersion对象。这个对象包含一个集合,除了很多其他的东西,我只与各自的集合工作,这是:

ICollection<AutodetectStep> AutodetectSteps { get; set; }

AutodetectStep类有4个子类,在它的一个子类上,我需要在创建子类时调用这个扩展方法。

我必须创建许多子对象并将它们添加到集合中,而且,我永远不会实例化我的对象,因为那里的所有内容都是静态的。

那么使用工厂模式合适吗?

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

创建一个继承你的类型的类

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替代原则"。
例如,你的额外逻辑不能破坏基类的预期行为。

不,这不可能。如果它是,它将是非常不可靠的,因为它将取决于您是否包含相关的扩展与using或没有。这实际上是扩展方法的普遍问题,但在这里它甚至更糟,因为它永远不会导致编译时错误。

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