Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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#_.net_Inheritance_Multiple Inheritance - Fatal编程技术网

C# 是否有一种方便的方法将所有接口方法映射到子对象上?

C# 是否有一种方便的方法将所有接口方法映射到子对象上?,c#,.net,inheritance,multiple-inheritance,C#,.net,Inheritance,Multiple Inheritance,假设我需要。这是不允许的,因此我可以执行以下操作:从一个类继承,并将另一个类作为成员变量包含,从其接口继承,并通过将这些接口的所有方法重定向到该成员变量来重新实现这些接口的所有方法: interface SecondBaseInterface { void FirstMethod(); void SecondMethod(); }; class MyClass : FirstBaseClass, SecondBaseInterface { public void Fir

假设我需要。这是不允许的,因此我可以执行以下操作:从一个类继承,并将另一个类作为成员变量包含,从其接口继承,并通过将这些接口的所有方法重定向到该成员变量来重新实现这些接口的所有方法:

interface SecondBaseInterface {
    void FirstMethod();
    void SecondMethod();
};

class MyClass : FirstBaseClass, SecondBaseInterface {

   public void FirstMethod()
   {
      secondBase.FirstMethod();
   }

   public void SecondMethod()
   {
      secondBase.SecondMethod();
   }

   SecondBaseClass secondBase = new SecondBaseClass();
};
现在这是可行的,但是如果在
SecondBaseInterface
中有很多方法,那么它将需要大量键入实际上没有任何用处的代码,我将不得不维护这些代码,以防
SecondBaseInterface
发生更改


是否有一些C#特性会告诉编译器“对于
SecondBaseInterface
的所有方法,请调用此成员变量的相应方法”或其他一些方便的方法来执行如此大规模的重定向?

我也想有这样的机会,但我认为它不存在。不过,如果您真的需要一个可以同时充当其两个超类的类,请不要害怕这样做:它是众所周知的(您可能知道)。

我也希望有这样的机会,但我认为它不存在。不过,如果您真的需要一个可以同时充当其两个超类的类,请不要害怕这样做:它是众所周知的(您可能知道)。

没有简单的语言特性让您想到,这里有一些想法:

  • 使用.NET4.0,您可以在其中动态添加属性/成员
  • 使用面向方面的预编程或IL编织来添加混音。例如,见
  • 使用某种形式的代码生成,例如

  • 脑海中没有简单的语言功能,以下是一些想法:

  • 使用.NET4.0,您可以在其中动态添加属性/成员
  • 使用面向方面的预编程或IL编织来添加混音。例如,见
  • 使用某种形式的代码生成,例如

  • 我认为几乎每一个经验丰富的C#开发者在某个阶段都希望这样做,尤其是那些曾经是Delphi开发者的人。它被称为“委托实现”,可以在Delphi中使用

    事实上,负责这一德尔福功能的史蒂夫·泰西拉(Steve Teixeira)现在在微软公司工作。他在那里谈论这件事


    不幸的是,C#无法做到这一点,因为CLI不支持委托实现。

    我认为几乎每一位经验丰富的C#开发人员在某个阶段都希望做到这一点,尤其是那些以前是Delphi开发人员的人。它被称为“委托实现”,可以在Delphi中使用

    事实上,负责这一德尔福功能的史蒂夫·泰西拉(Steve Teixeira)现在在微软公司工作。他在那里谈论这件事

    不幸的是,C#无法做到这一点,因为CLI不支持委托实现。

    我知道其中的痛苦

    我已经开始了自己的项目来解决这个问题

    这给C#带来了一种形式的

    您的代码如下所示:

    class FirstRole : Role {
      public void FirstMethod() { ... }
      public void SecondMethod() { ... }
    }
    
    class SecondRole : Role {
      ...
    }
    
    class MyClass : Does<FirstRole>, Does<SecondRole> {
    
    }
    
    class-FirstRole:Role{
    public void FirstMethod(){…}
    public void SecondMethod(){…}
    }
    第二类角色:角色{
    ...
    }
    我的班级:有,有{
    }
    
    您还可以通过角色实现接口,它们将被带到编写类。

    我知道其中的痛苦

    我已经开始了自己的项目来解决这个问题

    这给C#带来了一种形式的

    您的代码如下所示:

    class FirstRole : Role {
      public void FirstMethod() { ... }
      public void SecondMethod() { ... }
    }
    
    class SecondRole : Role {
      ...
    }
    
    class MyClass : Does<FirstRole>, Does<SecondRole> {
    
    }
    
    class-FirstRole:Role{
    public void FirstMethod(){…}
    public void SecondMethod(){…}
    }
    第二类角色:角色{
    ...
    }
    我的班级:有,有{
    }
    

    您还可以通过角色实现接口,这些接口将被传递到编写类。

    作为补充说明,Resharper具有生成此类方法的功能。虽然不能避免混乱的代码,但可以避免大量键入。生成->委派成员注册表、控制台、复制、粘贴?哦,等等,你想要方便:)作为补充说明,Resharper有一个功能来生成这样的方法。虽然不能避免混乱的代码,但可以避免大量键入。生成->委派成员注册表、控制台、复制、粘贴?哦,等等,你想要方便:)你可以在家里和家里做。虽然,我认为它有一些。你可以在家里和家里这样做。虽然,我认为它有一些。