[C#] 인터페이스를 사용할 때 프라이빗 세터를 어떻게 구현합니까?

몇 가지 속성을 가진 인터페이스를 만들었습니다.

인터페이스가 존재하지 않으면 클래스 객체의 모든 속성이

{ get; private set; }

그러나 이것은 인터페이스를 사용할 때 허용되지 않으므로 어떻게 할 수 있습니까?



답변

인터페이스에서는 getter속성에 대해서만 정의 할 수 있습니다

interface IFoo
{
    string Name { get; }
}

그러나 수업 시간에 private setter

class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}


답변

인터페이스는 공개 API를 정의합니다. 공개 API에 게터 만 포함 된 경우 인터페이스에서 게터 만 정의합니다.

public interface IBar
{
    int Foo { get; }
}

개인 세터는 다른 개인 구성원과 마찬가지로 공용 API의 일부가 아니므로 인터페이스에서 정의 할 수 없습니다. 그러나 인터페이스 구현에 (비공개) 멤버를 자유롭게 추가 할 수 있습니다. 실제로 setter가 퍼블릭 또는 프라이빗으로 구현되는지 또는 setter가 있는지 여부는 중요하지 않습니다.

 public int Foo { get; set; } // public

 public int Foo { get; private set; } // private

 public int Foo
 {
    get { return _foo; } // no setter
 }

 public void Poop(); // this member also not part of interface

Setter는 인터페이스의 일부가 아니므로 인터페이스를 통해 호출 할 수 없습니다.

 IBar bar = new Bar();
 bar.Foo = 42; // will not work thus setter is not defined in interface
 bar.Poop(); // will not work thus Poop is not defined in interface


답변