1

COM Objects don't allow uses inheritance. I have many classes with devided logic, for re-use code. Can Roslyn change class inheritance and combine classes together? Or any fody weavers? How overwhelmed is using Roslyn for this task?

Example:


    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()
        {
        }
    }

As result I want to get this code or compiled code


    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()
        {
        }
    }

1 Answers1

0

You can 'combine' your inheritance into one class with Mono.Cecil or dnLib

Shouldn't be too hard. Course of action:

  1. Collect all of the classes you need to "crush down"
  2. Do a foreach through all classes resolving all inheritance tree
  3. Remove inheritance from each class
  4. Add/remove wanted fields/properties/methods into it
  5. Save your assembly.
Vyacheslav
  • 559
  • 2
  • 11