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
因为命名解析是这样的。
有没有办法从外部更改给定 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
因为命名解析是这样的。