外部改变类的实现

时间:2018-05-19 10:14:34

标签: c# reflection dependency-injection interface partial-classes

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

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

我想定义另一个类:

public class Class2 : Interface1
{
    //implementation
}

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

1 个答案:

答案 0 :(得分:1)

如果Test是没有构造函数的部分类,则可以在另一个文件中添加Test()构造函数并覆盖Field的值(字段初始值设定项在类构造函数之前运行) )。请注意,Class1仍将构建,但将被丢弃。如果创建一个new Class1是一个廉价的操作,那么“浪费”工作就没有问题,但是如果new Class1非常慢(也许是因为它从磁盘读取了5gb的数据),那么它就是“糟糕”去做。

对于部分类还有另一个奇妙的技巧:如果new Class1没有使用完全指定的名称(具有完整命名空间的名称),那么如果你这样做

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

然后new Class1()将“指向”您的 Class1,因为命名解析就是这样。