我有这个界面:
public interface IValidationCRUD
{
public ICRUDValidation IsValid(object obj);
private void AddError(ICRUDError error);
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用它(实现接口,自动生成代码)时,我得到了这个:
public class LanguageVAL : IValidationCRUD
{
public ICRUDValidation IsValid(object obj)
{
throw new System.NotImplementedException();
}
public void AddError(ICRUDError error)
{
throw new System.NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
AddError方法是公共的,而不是我想要的私有方法.
我怎么能改变这个?
Bot*_*000 45
接口只能有公共方法.您可以考虑使用带有受保护抽象方法的抽象基类AddError
.然后,基类可以实现IValidationCRUD
接口,但只有在删除了私有方法之后才能实现.
像这样:
public interface IValidationCRUD
{
ICRUDValidation IsValid(object obj);
}
public abstract class ValidationCRUDBase: IValidationCRUD {
public abstract ICRUDValidation IsValid(object obj);
protected abstract void AddError(ICRUDError error);
}
Run Code Online (Sandbox Code Playgroud)
Kim*_*man 32
私有成员作为界面的一部分毫无意义.接口用于定义一组方法,一个角色,一个对象必须始终实现.另一方面,私有方法是实现细节,不用于公共消费.
小智 6
接口不能包含私有字段.但是,您可以实现的最接近"私有字段"的行为是使用显式实现(在此处解释:http://msdn.microsoft.com/en-us/library/ms173157.aspx)
在实际情况下它不是一个有效的场景,但您仍然可以通过接口的显式实现来实现
interface Itest
{
void functiona();
void functionb();
}
class child : Itest
{
public void functiona()
{
}
void Itest.functionb()
{
}
}
Run Code Online (Sandbox Code Playgroud)
这里 functionb() 是明确实现的,所以如果你创建了 child 类的对象,你就不会得到 functionb()