C# 如果我想在一个子类中继承两个不同的类,那么最好的接口替换是什么?
我想对我的mvc web应用程序应用一些默认配置。 这是我的要求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#中使用接口可以实现多重继承;但接口的问题是,它必须实现接口成员 任何专家都能帮助我吗?您可以拥有一个继承另一个(控制器)的抽
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
确实是一种方法。这对我很有用。一个抽象类可以继承另一个抽象类。让我试试。谢谢你,老兄。第一条路最好,第二条路最好。有时候是这样,通常第二条路更好更干净。这对我很有用。一个抽象类可以继承另一个抽象类。让我试试。谢谢,老兄。第一条路最好,第二条路最好。有时候是,通常第二条路更好更干净。