C#-接口拆分?

C#-接口拆分?,c#,interface,C#,Interface,我有一个类的Add方法与其他类不同,因此无法实现相同的接口。。。我应该拆分当前接口以便它也可以使用它,还是应该为它创建另一个接口 更新: public interface IProductRepository<T, T2> where T : class where T2 : class { void Add(T model, int categoryId); void Edit(T model, int id); void Delete(in

我有一个类的Add方法与其他类不同,因此无法实现相同的接口。。。我应该拆分当前接口以便它也可以使用它,还是应该为它创建另一个接口

更新:

public interface IProductRepository<T, T2>
    where T : class
    where T2 : class
{
    void Add(T model, int categoryId);
    void Edit(T model, int id);
    void Delete(int id);

    T2 Get(int id);
}
公共接口存储库
T:在哪里上课
其中T2:类
{
void Add(T型,int类);
无效编辑(T模型,int id);
无效删除(int-id);
t2get(int-id);
}
如您所见,上面的接口有一个Add方法,它需要categoryId


My Category类与上面的相同,但在Add方法中没有categoryId参数。我应该为Category类创建一个新接口吗?

想想它的用途

也许您的另一个类似乎不喜欢使用此接口的功能,而不是执行相同的操作(添加)。然后,您可以为这个新(新的其他)类型的类创建其他接口,或者不使用抽象接口而单独使用这个类

也许您需要对其他类进行重构,以获得接口中
Add()
smillar的定义

如果你不能重构其他类,而这个类似乎有这个接口。 然后,您可以创建其他接口或在旧接口中创建新函数,如
Add_Extended()
,用于添加具有其他参数列表的功能。

C#允许您显式实现接口方法:

public class A : IFoo, IBar{
    void IFoo.DoSomething() {
        //DoSomething();
    }
    int IBar.DoSomething() {
        return -1;
    }
}
这应该允许您实现任何接口,即使它与您已经定义的方法签名冲突。调用哪个方法将取决于调用它的类型。例如:

((IFoo) new A()).DoSomething(); // ... may do something different than ...
((IBar) new A()).DoSomething(); // ... would do.

“拆分接口”是什么意思?一些代码会有所帮助。Add方法做什么,类之间有什么关系?您是要使用该接口创建类的实例,还是该接口只是用于“契约”@斯维斯塔克是对的——想想这是为了什么。这个答案比问题更让我困惑。我基本上理解他们在说什么。本质上,“试着设计你的对象模型,这样就不会出现这种情况。”。他们是波兰人,所以英语很可能是第二语言。如果你希望某个对象是某种类型的,你真的应该施放。尝试调试时,
NullReferenceException
不会有太大帮助。我同意chaos的观点,它也可以写成“IFoo foo=new A();foo.DoSomething();”我希望人们不要认为“as”操作符是(cast)的更好的替代方法。他们不一样@蒂姆维:mjf的建议是一种更干净的方式,即使它需要更多的角色。使用强制转换表示法进行上传会破坏有用的编译器错误。+1但我认为,除了显式实现
IFoo.DoSomething
IBar.DoSomething
之外,如果在类a中添加
默认DoSomething方法
会更好。