class 的外部更改实施

external changing implementation of class

有没有办法从外部更改给定 class 的实现?例如,我有以下实现:

 public partial class Test
{
    public Interface1 Field = new Class1();
}
public interface Interface1
{
    //implementation    
}
public class Class1 : Interface1
{
    //implementation
}

我想再定义一个class:

public class Class2 : Interface1
{
    //implementation
}

并将 Test.Field 更改为 Class2 class 的对象。我无法修改测试 class 的实现。我只能添加另一个文件及其部分实现。我也不能使用任何依赖注入库。

如果 Test 是没有构造函数的部分 class,那么您可以在另一个文件中添加一个 Test() 构造函数并覆盖 Field 的值(字段初始值设定项) 运行 在 class 构造函数之前)。请注意 Class1 仍将构建,但将被丢弃。如果创建一个 new Class1 是一个廉价的操作,那么 "wasting" 工作没有问题,但是如果 new Class1 很慢(可能是因为它从磁盘读取 5gb 的数据),那么"bad" 去做。

部分 classes 还有另一个绝妙的技巧:如果 new Class1 没有使用完全指定的名称(具有完整命名空间的名称),那么如果您使用

partial class Test 
{ 
    // Your Class1 (technically Test.Class1)
    // that is distinct from the other Class1
    public class Class1 : Interface1 { } 
}

然后 new Class1() 会 "point" 到 你的 Class1 因为命名解析是这样的。