Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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#_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# 如果我想在一个子类中继承两个不同的类,那么最好的接口替换是什么?

C# 如果我想在一个子类中继承两个不同的类,那么最好的接口替换是什么?,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我想对我的mvc web应用程序应用一些默认配置。 这是我的要求 public class HomeController : Controller, Configs { // action's and private methods goes here. } 这里控制器类是一个抽象类,Configs类是一个非抽象(普通)类,但c#编译器不允许我继承多个类。我知道在c#中使用接口可以实现多重继承;但接口的问题是,它必须实现接口成员 任何专家都能帮助我吗?您可以拥有一个继承另一个(控制器)的抽

我想对我的mvc web应用程序应用一些默认配置。 这是我的要求

public class HomeController : Controller, Configs
{
  // action's and private methods goes here.
}
这里控制器类是一个抽象类,Configs类是一个非抽象(普通)类,但c#编译器不允许我继承多个类。我知道在c#中使用接口可以实现多重继承;但接口的问题是,它必须实现接口成员


任何专家都能帮助我吗?

您可以拥有一个继承另一个(
控制器
)的抽象基类

然后您的
HomeController
可以继承
BaseController
... 然后继承控制器

public abstract class BaseController : Controller
{
  //your base config stuff here
}
public class HomeController : BaseController
{

}
虽然这会起作用,但您很快就会陷入多个继承级别的混乱中。
首选的方法是
组合而不是继承

实现这一目标的一个方法是:

public class Configs
{
  //your base config stuff here
}   

public class HomeController : Controller //note only inherits framework controller
{

    private Configs _configs;

    public HomeController()
    {
        _configs = new Configs()
    }

    public ActionResult Home()
    {
        //use _configs here
    }
}

当然,您也可以通过IOC等注入
Configs
。。。但是这有点超出了这个答案的范围。

您可以拥有一个继承另一个(
控制器
)的抽象基类

然后您的
HomeController
可以继承
BaseController
... 然后继承控制器

public abstract class BaseController : Controller
{
  //your base config stuff here
}
public class HomeController : BaseController
{

}
虽然这会起作用,但您很快就会陷入多个继承级别的混乱中。
首选的方法是
组合而不是继承

实现这一目标的一个方法是:

public class Configs
{
  //your base config stuff here
}   

public class HomeController : Controller //note only inherits framework controller
{

    private Configs _configs;

    public HomeController()
    {
        _configs = new Configs()
    }

    public ActionResult Home()
    {
        //use _configs here
    }
}

当然,您也可以通过IOC等注入
Configs
。。。但这有点超出了这个答案的范围。

您可以实现多个接口,但我不会称之为多重继承。您实际上并没有从接口继承任何东西,接口迫使您遵守其契约。接口由实现类决定。您的
配置中到底有什么?我认为从
Configs
继承不是一个好主意,因为它没有真正意义。您的控制器不是一个更具体的类,并且与配置没有真正的关系。Fe:
公共类狗:动物
有道理,因为它们之间有明确的关系。Alex用basecontroller的回答更有意义。这样,您可以在特定的控制器之间共享所有通用的控制器代码。@sniels感谢您的时间和重播,我知道,您的建议,但这会使代码重复。如果我的应用程序中有超过10个控制器。然后我必须实现所有控制器接口的所有成员。@sniels是的,对。是的,我同意,我不是建议;)我在澄清接口如何不是真正的继承,并没有真正建议您使用接口。我看得出我的评论有多么令人困惑。在这种情况下,使用
BaseController
确实是一种方法。您可以实现多个接口,但我不会称之为多重继承。您实际上并没有从接口继承任何东西,接口迫使您遵守其契约。接口由实现类决定。您的
配置中到底有什么?我认为从
Configs
继承不是一个好主意,因为它没有真正意义。您的控制器不是一个更具体的类,并且与配置没有真正的关系。Fe:
公共类狗:动物
有道理,因为它们之间有明确的关系。Alex用basecontroller的回答更有意义。这样,您可以在特定的控制器之间共享所有通用的控制器代码。@sniels感谢您的时间和重播,我知道,您的建议,但这会使代码重复。如果我的应用程序中有超过10个控制器。然后我必须实现所有控制器接口的所有成员。@sniels是的,对。是的,我同意,我不是建议;)我在澄清接口如何不是真正的继承,并没有真正建议您使用接口。我看得出我的评论有多么令人困惑。在这种情况下,使用
BaseController
确实是一种方法。这对我很有用。一个抽象类可以继承另一个抽象类。让我试试。谢谢你,老兄。第一条路最好,第二条路最好。有时候是这样,通常第二条路更好更干净。这对我很有用。一个抽象类可以继承另一个抽象类。让我试试。谢谢,老兄。第一条路最好,第二条路最好。有时候是,通常第二条路更好更干净。