如何在界面中将方法设为私有?

Sma*_*art 38 c# interface

我有这个界面:

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

私有成员作为界面的一部分毫无意义.接口用于定义一组方法,一个角色,一个对象必须始终实现.另一方面,私有方法是实现细节,不用于公共消费.

  • 你不能.指定访问修饰符(私有或公共)会导致编译错误. (7认同)

小智 6

接口不能包含私有字段.但是,您可以实现的最接近"私有字段"的行为是使用显式实现(在此处解释:http://msdn.microsoft.com/en-us/library/ms173157.aspx)


Aji*_*Aji 5

在实际情况下它不是一个有效的场景,但您仍然可以通过接口的显式实现来实现

 interface Itest
 {
      void functiona();
      void functionb();
 }
class child : Itest
{
     public void functiona()
     {
     }
     void Itest.functionb()
     {
     }
}
Run Code Online (Sandbox Code Playgroud)

这里 functionb() 是明确实现的,所以如果你创建了 child 类的对象,你就不会得到 functionb()