如何在程序集中创建现有类型以在 .Net 中实现接口
How to make an existing type in an assembly to implement an interface in .Net
如何使程序集中的现有类型在 运行 时间实现接口(提取接口然后实现它)(使用 运行 时间编织,Mono.Cecil , 通用编译器基础结构...)
Class 汇编:
public class MyClass
{
public method1(){}
public method2(){}
}
生成
public class IMyClass
{
method1();
method2();
}
public class MyClass : IMyClass
{
public method1(){}
public method2(){}
}
如果我没理解错的话,您可以使用例如 Importtu 库(https://github.com/ekonbenefits/impromptu-interface,也有 nuget 包)来实现。完整样本:
internal class Program {
private static void Main(string[] args) {
// suppose it's from another assembly, and you don't have direct reference to type
var c = Activator.CreateInstance(typeof(MyClass));
IMyClass iface = c.ActLike<IMyClass>();
iface.method1();
Console.ReadKey();
}
}
public class MyClass
{
public void method1() {
Console.WriteLine("Method 1");
}
public void method2() {
Console.WriteLine("Method 2");
}
}
public interface IMyClass {
void method1();
void method2();
}
请注意,MyClass 未实现 IMyClass 接口,但您在运行时将其用作 IMyClass 类型的变量。
如果您在编译时没有接口,并且想在运行时也构建 接口 - 那么我不明白它如何在现实生活中使用。
如何使程序集中的现有类型在 运行 时间实现接口(提取接口然后实现它)(使用 运行 时间编织,Mono.Cecil , 通用编译器基础结构...)
Class 汇编:
public class MyClass
{
public method1(){}
public method2(){}
}
生成
public class IMyClass
{
method1();
method2();
}
public class MyClass : IMyClass
{
public method1(){}
public method2(){}
}
如果我没理解错的话,您可以使用例如 Importtu 库(https://github.com/ekonbenefits/impromptu-interface,也有 nuget 包)来实现。完整样本:
internal class Program {
private static void Main(string[] args) {
// suppose it's from another assembly, and you don't have direct reference to type
var c = Activator.CreateInstance(typeof(MyClass));
IMyClass iface = c.ActLike<IMyClass>();
iface.method1();
Console.ReadKey();
}
}
public class MyClass
{
public void method1() {
Console.WriteLine("Method 1");
}
public void method2() {
Console.WriteLine("Method 2");
}
}
public interface IMyClass {
void method1();
void method2();
}
请注意,MyClass 未实现 IMyClass 接口,但您在运行时将其用作 IMyClass 类型的变量。
如果您在编译时没有接口,并且想在运行时也构建 接口 - 那么我不明白它如何在现实生活中使用。