c# - 是否可以创建一个在创建对象时调用的扩展方法?

标签 c#

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

编辑:

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

EcuVersion Ecu;

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

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

平台将寻找 Ecu 对象。

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

ICollection<AutodetectStep> AutodetectSteps { get; set; }

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

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

那么工厂模式适合用吗?

最佳答案

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

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

关于c# - 是否可以创建一个在创建对象时调用的扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40442961/

相关文章:

c# - EFCodeFirst : The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects

c# - Visual Studio 自动删除未被引用的方法的工具

c# - 在 DataFormatString C# - MySQL 中按大写字母拆分字符串

c# - 将 PictureBox 的图像更改为来 self 的资源的图像?

c# - 为什么要使用显式接口(interface)实现来调用 protected 方法?

c# - 在 SEO 的动态 UR 中使用 *.html 扩展名

c# - 通过 C# 中的 WebBrowser 将模拟点击发送到嵌入在 HTML 中的 Flash 对象

c# - 如何使用 Spliton 和类型映射复杂对象?

c# - AWS 的奇怪版本控制问题

c# - Nhibernate - 如何使用 CompositeId 设计域对象和映射