C# 我只需要实现一些方法
在我的项目中有一个接口。在界面中有很多方法。我们公司的其他开发人员都继承了一些类中的接口并实现了所有方法,我只需要实现一些方法。那一次我犯了一些错误。“不实现接口成员”。我怎样才能解决这个问题? 例如:-C# 我只需要实现一些方法,c#,asp.net,oop,interface,C#,Asp.net,Oop,Interface,在我的项目中有一个接口。在界面中有很多方法。我们公司的其他开发人员都继承了一些类中的接口并实现了所有方法,我只需要实现一些方法。那一次我犯了一些错误。“不实现接口成员”。我怎样才能解决这个问题? 例如:- public interface IComplianceRepository { IList<ComplianceModel> LoadComplianceModel(Guid userId); bool CreateCompliance(C
public interface IComplianceRepository
{
IList<ComplianceModel> LoadComplianceModel(Guid userId);
bool CreateCompliance(ComplianceModel complianceModel);
IList<ComplianceType> LoadComplianceType();
IList<ComplianceStatu> LoadComplianceStatus();
IList<UserDetails> LoadUsersBySchoolId(int schoolId);
Compliance GetComplianceByComplianceId(int complianceId);
bool UpdateCompliance(ComplianceModel complianceModel);
UserProfile GetUserProfileDetails(Guid userId);
FinancialCompliance GetFinancialComplianceByComplianceId(int ComplianceId);
void GetComplianceModelByComplianceId(ComplianceModel complianceModel, int complianceId);
}
公共接口IComplianceRepository
{
IList LoadComplianceModel(Guid用户ID);
bool CreateCompliance(ComplianceModel ComplianceModel);
IList LoadComplianceType();
IList LoadComplianceStatus();
IList LoadUsersBySchoolId(int schoolId);
Compliance GetComplianceByComplianceId(int complianceId);
bool UpdateCompliance(ComplianceModel ComplianceModel);
UserProfile GetUserProfileDetails(Guid用户ID);
FinancialCompliance获取FinancialComplianceByComplianceId(int ComplianceId);
作废GetComplianceModelByComplianceId(ComplianceModel ComplianceModel,int complianceId);
}
更多的开发人员使用了上述接口并实现了all方法。但我不想实现以下方法
IList<ComplianceModel> LoadComplianceModel(Guid userId);
bool CreateCompliance(ComplianceModel complianceModel);
IList LoadComplianceModel(Guid用户ID);
bool CreateCompliance(ComplianceModel ComplianceModel);
我怎样才能解决这个问题?你不能。接口存在的唯一原因是整个契约必须在实现它的类中实现。如果您不能或不想更改接口,您应该实现这些方法并抛出一个
NotSupportedException
。我建议为此使用显式接口继承,这样虚拟方法就不会出现在类上
void IList<ComplianceModel> IComplianceRepository.LoadComplianceModel(Guid userId)
{
throw new NotSupportedException();
}
void IList IComplianceRepository.LoadComplianceModel(Guid用户ID)
{
抛出新的NotSupportedException();
}
作为BCL中的一个示例,您可以查看。这是一个显式接口实现,它抛出NotSupportedException
。这也是一个糟糕设计的例子,说明了.NET4.0中缺少IReadOnlyList
接口
真正的解决方案是重构代码。有更小的接口,可以完全实现。请看一下: 接口隔离原则(ISP)规定,不应强制任何客户端依赖于它不使用的方法。ISP将非常大的接口拆分为更小、更具体的接口,这样客户只需知道他们感兴趣的方法
创建两个接口,父接口和子接口。 父母会得到你想要的,孩子会得到其他的
public interface Parent {
// parent methods here
}
public interface Child : Parent{
// child methods here
}
接口作为接口的实现者和用户之间的契约存在。用户/消费者要求实现所有方法。首先,问问自己,没有这些方法的实现是否仍然有用。如果是这样,问问自己是否需要从这个接口继承 如果经过此反射后,您仍然有充分的理由实现此接口而不实现所有方法,则可以创建存根方法:
IList<ComplianceModel> LoadComplianceModel(Guid userId)
{
throw NotSupportedException();
}
IList LoadComplianceModel(Guid用户ID)
{
抛出NotSupportedException();
}
或者,更危险但破坏性可能更小:
IList<ComplianceModel> LoadComplianceModel(Guid userId)
{
return null;
}
IList LoadComplianceModel(Guid用户ID)
{
返回null;
}
如果一个类实现了一个接口,它必须实现该接口上的所有功能。接口是一个功能契约,因此任何声称满足该契约的东西实际上都必须这样做。现在,您不必有意义地执行该合同中的所有内容。例如,对于您知道不打算使用的方法,执行此操作的标准方法是:
public void SomeMethodIKnowIWontUse()
{
throw new NotSupportedException();
}
因此,如果该方法被实际使用,那么它将抛出一个异常。(当您认为它不会被使用时,这表明您错了,您应该实施它。)
请记住,这可能会很快导致“代码气味”。如果您有许多不需要实现的对象成员,那么显然设计是错误的
这里的另一种可能性是接口设计不正确。也许是想把太多的东西留给太多的人?这可能违反了法律。例如,以该接口为例:
public interface CatchAll
{
void FunctionForOneResponsibility();
void FunctionForCompletelyDifferentResponsibility();
}
使用非常做作的名称,很明显这个接口有太多的责任。应该是这样的:
public interface OneResponsibilitySatisfier
{
void FunctionForThisResponsibility();
}
public interface AnotherResponsibilitySatisfier
{
void FunctionForThisOtherResponsibility();
}
没有规则说你需要有几个接口,或者一个接口需要有很多成员。每个人都应该为自己的职责提供一个有意义的功能契约,仅此而已。如果碰巧您有一个类将用于满足这两个职责,那么它可以实现两个接口:
public class CrossCuttingObject : OneResponsibilitySatisfier, AnotherResponsibilitySatisfier
{
public void FunctionForThisResponsibility() { }
public void FunctionForThisOtherResponsibility() { }
}
这是接口隔离的理想方案。请参考此处的设计原则(oodesign.com/interface separation principle.html),您需要分离合同,不要把所有鸡蛋放在一个篮子里。制作两个单独的接口?一个接口就是一个契约,如果你尝试使用一个实现接口的类,但没有提供两个方法的实现,而有人试图调用它,会发生什么?如果很难更改当前接口,而你不需要实现这些方法,似乎您只需要实现它们,然后抛出未实现的异常或返回null。
ComplianceStatu
-使用实体框架?:-P无论如何,如果您不必实现整个接口来实现您的目标,那么接口太宽了。将其拆分为多个接口,以便每个接口只包含符合其描述的方法。另一种方法是实现这些方法,但从那里抛出一个NotImplementedException…@Dennis Rongo我认为你的想法不是很好的实践这是接口隔离的理想方案。请参考这里的设计原则(),你是