是否有用于将继承链替换为一个 class 的 Roslyn 或 FodyWeaver 函数?
Is there Roslyn or FodyWeaver function for replacing inheritance chain to one class?
COM 对象不允许使用继承。
我有许多 classes 具有分离的逻辑,用于重用代码。
Roslyn 可以更改 class 继承并将 class 组合在一起吗?
或者有福迪织工吗?
使用 Roslyn 完成这项任务有多不知所措?
示例:
public class BaseFunc
{
public string Title { get; set; }
public decimal X { get; set; }
public decimal Y { get; set; }
public decimal Sum()
{
return X + Y;
}
}
public class ConsoleFunc : BaseFunc
{
public void WriteLine()
{
Console.WriteLine($@"X + Y = {Sum()}");
}
}
public class ConsolasFuncComObject : ConsoleFunc
{
public void Init()
{
}
}
结果我想得到这段代码或编译后的代码
public class ConsolasFuncComObjectFull
{
public string Title { get; set; }
public decimal X { get; set; }
public decimal Y { get; set; }
public decimal Sum()
{
return X + Y;
}
public void WriteLine()
{
Console.WriteLine($@"X + Y = {Sum()}");
}
public void Init()
{
}
}
您可以'combine'将您的遗产与Mono.Cecil or dnLib
合二为一class
应该不会太难。行动方针:
- 收集所有你需要“粉碎”的classes
- 通过所有 classes 执行
foreach
解析所有继承树
- 从每个 class
中删除继承
- Add/remove 想要 fields/properties/methods 进去
- 保存您的程序集。
COM 对象不允许使用继承。 我有许多 classes 具有分离的逻辑,用于重用代码。 Roslyn 可以更改 class 继承并将 class 组合在一起吗? 或者有福迪织工吗? 使用 Roslyn 完成这项任务有多不知所措?
示例:
public class BaseFunc
{
public string Title { get; set; }
public decimal X { get; set; }
public decimal Y { get; set; }
public decimal Sum()
{
return X + Y;
}
}
public class ConsoleFunc : BaseFunc
{
public void WriteLine()
{
Console.WriteLine($@"X + Y = {Sum()}");
}
}
public class ConsolasFuncComObject : ConsoleFunc
{
public void Init()
{
}
}
结果我想得到这段代码或编译后的代码
public class ConsolasFuncComObjectFull
{
public string Title { get; set; }
public decimal X { get; set; }
public decimal Y { get; set; }
public decimal Sum()
{
return X + Y;
}
public void WriteLine()
{
Console.WriteLine($@"X + Y = {Sum()}");
}
public void Init()
{
}
}
您可以'combine'将您的遗产与Mono.Cecil or dnLib
合二为一class应该不会太难。行动方针:
- 收集所有你需要“粉碎”的classes
- 通过所有 classes 执行
foreach
解析所有继承树 - 从每个 class 中删除继承
- Add/remove 想要 fields/properties/methods 进去
- 保存您的程序集。