Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据所需的功能扩展多个/不同的对象?_C#_Inheritance - Fatal编程技术网

C# 根据所需的功能扩展多个/不同的对象?

C# 根据所需的功能扩展多个/不同的对象?,c#,inheritance,C#,Inheritance,是否有一种设计模式允许我根据需要的功能将一个对象定义为扩展另一个对象?例如,如果我有以下课程: using System; namespace C_ { public class Program { static void Main(string[] args) { Console.WriteLine("------------------------------------------------");

是否有一种设计模式允许我根据需要的功能将一个对象定义为扩展另一个对象?例如,如果我有以下课程:

using System;

namespace C_
{
    public class Program
    {
        static void Main(string[] args)
        {       
            Console.WriteLine("------------------------------------------------");
            C c = new C();
            Console.WriteLine("------------------------------------------------");
            D d = new D();
            Console.WriteLine("------------------------------------------------");
        }
    }

    public abstract class A 
    {
        public A() {}            

        public void DoSomething()
        {
            Console.WriteLine("Doing something");
        }

        public virtual void CallSomething()
        {
            DoSomething();
        }
    }

    public abstract class B : A
    {
        public B() {}

        public override void CallSomething()
        {
            Console.WriteLine("Do something extra");
            DoSomething();
        }
    }

    public class C : A
    {
        public C() 
        {
            CallSomething();
        }
    }

    public class D : B
    {
        public D() 
        {
            CallSomething();
        }
    }
}

基本上,B类是A类的扩展。我想要的最低功能在A类中定义,而在某些情况下,我可能需要B类中定义的更多功能。根据运行时需要的功能,是否可以让另一个类扩展A或B?我可以创建单独的类,每个类扩展A或B,但这会导致大量重复代码


编辑:添加了一个更具体的示例。类C和D具有相同的功能,只是D在继续之前需要做更多的工作,因此扩展了B而不是a。是否有一种设计模式,我不需要类D,可以根据需要选择C的功能

由于
A
抽象的
,因此您可以将属性
抽象的
(而不是
虚拟的
)。虽然这个问题我不太清楚,但你应该使用“取决于运行时需要什么功能”的组合,你能再解释一下吗?也许有一个具体的例子?有很多方法可以在运行时创建类型,但我怀疑这实际上不是您想要做的。