C#-接口拆分?

ebb*_*ebb 2 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(int id);

    T2 Get(int id);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,上面的接口具有一个需要categoryId的Add方法。

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

Str*_*ior 5

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

public class A : IFoo, IBar{
    void IFoo.DoSomething() {
        //DoSomething();
    }
    int IBar.DoSomething() {
        return -1;
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该允许您实现任何接口,即使它与您已经定义的方法签名冲突。调用哪种方法取决于被调用的类型。例如:

((IFoo) new A()).DoSomething(); // ... may do something different than ...
((IBar) new A()).DoSomething(); // ... would do.
Run Code Online (Sandbox Code Playgroud)

  • 如果您期望某个对象属于某种类型,则应该进行强制转换。尝试调试时,`NullReferenceException`不会很有帮助。 (2认同)