C#架构继承覆盖不同的签名?

C#架构继承覆盖不同的签名?,c#,inheritance,architecture,overriding,C#,Inheritance,Architecture,Overriding,我有三个类:CookedItem:conomableItem:Item 项实现此方法: protected void Initialize(string name,TypeItem type) {...} protected void Initialize(float duration,string name,TypeItem type) {...} conomableItem实现此方法: protected void Initialize(string name,TypeItem type

我有三个类:
CookedItem
conomableItem
Item

实现此方法:

protected void Initialize(string name,TypeItem type) {...}
protected void Initialize(float duration,string name,TypeItem type) {...}
conomableItem
实现此方法:

protected void Initialize(string name,TypeItem type) {...}
protected void Initialize(float duration,string name,TypeItem type) {...}
现在我的问题来了。调用
CookedItem
的正确方法是
conomableItem.Initialize()

是否可以隐藏方法项.Initialize()
以仅查看方法
conomableItem.Initialize()`

我无法使用
覆盖
,因为签名不同


有什么建议吗?

在您的类层次结构中,
初始化
方法是有效的,因此它们对于不在此继承层次结构中的类不可见,因此您可以为外部客户端设计更好的API

至于将方法隐藏在层次结构中,我认为这是不可能的,即使这些方法是虚拟的,编译器也不允许您更改这些方法的访问修饰符。 要了解更多关于为什么它被禁止的信息,请阅读

除了@Tolga-Evcimen提到的破坏LSP之外,拥有这种继承层次结构没有多大意义。
继承被认为是一种
关系,现在它实际上是一个项,如果调用属于项的初始化方法没有意义/产生不一致的对象状态?

您违反了实体的第三原则。利斯科夫替换原理。看一看,了解它是什么

基本上你建立了一个错误的继承


您应该做的是将
ICookable
IConsumable
接口作为行为。然后您将有两个不同的item类实现(您仍然可以在一个抽象类中抽象它们).

这是你应该使用构造函数的东西吗?No-
CookeEdItem
是一个
ConsomableItem
并且间接地是一个
,因此它对这两个函数都有权限。我不能使用构造函数,因为我使用的是Unity,但感谢你的建议。p想对继承自的
CookeEdItem
隐藏函数
Item
@DStanley-我理解这是不可能的-我已经解释了原因