有没有办法从外部改变给定类的实现?例如,我有以下实现:
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类的实现。我只能添加其部分实现的另一个文件。我也不能使用任何依赖注入库。
答案 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
,因为命名解析就是这样。