인터페이스에서 속성을 구현하는 방법


135

인터페이스가 있습니다 IResourcePolicy속성이 포함 된 가 있습니다 Version. 다른 페이지에 작성된 코드, 값을 포함하는이 속성을 구현해야합니다.

IResourcePolicy irp(instantiated interface)
irp.WrmVersion = "10.4";

속성을 어떻게 구현할 수 version있습니까?

public interface IResourcePolicy
{
   string Version
      {
          get;
          set;
      }
}

1
왜 인터페이스에 무언가를 구현하고 싶습니까? 인터페이스를 지정하면됩니다.
Stefan Steinegger

답변:


296

인터페이스에서 다음 특성을 지정하십시오.

public interface IResourcePolicy
{
   string Version { get; set; }
}

구현 클래스에서 구현해야합니다.

public class ResourcePolicy : IResourcePolicy
{
   public string Version { get; set; }
}

이것은 비슷해 보이지만 완전히 다른 것입니다. 인터페이스에는 코드가 없습니다. getter와 setter가있는 속성이 무엇이든간에 지정하면됩니다.

수업에서는 실제로 구현합니다. 가장 짧은 방법은이 { get; set; }구문을 사용하는 것 입니다. 컴파일러는 필드를 작성하고 이에 대한 getter 및 setter 구현을 생성합니다.


Version수업에서 공개 한다고 어떻게 말 합니까? 아, 내 문제가 보인다 : 만약 당신이 명시 적으로 인터페이스를 구현한다면 (예를 들어 IResourcePolicy.Version, 당신은 그것이 공용인지 정의 할 수 없다.)
PeterX

5
네 말이 맞아, 공개되어야한다. 나는 그것을 고쳤다. 나는 설명하려고했던 것과 관련이 없기 때문에 이것에 대해별로 신경 쓰지 않았습니다.
Stefan Steinegger

7
물론 관련이 있습니다! 좋은 답변을 전달하려면 사람들이 간단하게 답변해야합니다. 그래서 그들은 다음 문제에 걸려 넘어지지 않습니다.
Bitterblue

21

이런 말인가요?

class MyResourcePolicy : IResourcePolicy {
    private string version;

    public string Version {
        get {
            return this.version;
        }
        set {
            this.version = value;
        }
    }
}

1
이것은 알고 있지만, 이미 irp.WrmVersion = "10.4"와 같은 값을 할당했습니다. 내 질문을 참조하십시오, 나는 그 가치를 잃을 필요가 없습니다, 나는 그것을 통과해야합니다
peter

16

인터페이스에는 구현을 포함 할 수 없습니다 (기본값 포함). 추상 클래스로 전환해야합니다.


그것이 어떻게 다른 곳에서이 속성을 구현할 수 있을까요
peter

클래스 @petr을 만드는 것이 구현하는 인터페이스, 인터페이스 유형이 변수에 클래스 및 할당에 인스턴스를 생성보다
아르센 Mkrtchyan

4
첫 번째 문장에 투표하겠습니다. 그러나 인터페이스가 충분하면 추상 기본 클래스는 항상 피해야합니다. 따라서 어떤 문제를 실제로 해결해야하는지 알기 전에 기본 클래스를 만들 것을 권장하지 않습니다.
Stefan Steinegger

2
@Stefan, 두 번째 문장으로, 그가 실제로 도입 될 기본값이 필요하다면 그는 추상 클래스를 사용해야한다는 것을 의미했습니다.
Vitaliy Liptchinsky

1

인터페이스에서 속성을 사용하는 간단한 예 :

using System;
interface IName
{
    string Name { get; set; }
}

class Employee : IName
{
    public string Name { get; set; }
}

class Company : IName
{
    private string _company { get; set; }
    public string Name
    {
        get
        {
            return _company;
        }
        set
        {
            _company = value;
        }   
    }
}

class Client
{
    static void Main(string[] args)
    {
        IName e = new Employee();
        e.Name = "Tim Bridges";

        IName c = new Company();
        c.Name = "Inforsoft";

        Console.WriteLine("{0} from {1}.", e.Name, c.Name);
        Console.ReadKey();
    }
}
/*output:
 Tim Bridges from Inforsoft.
 */

0
  • 하지만 이미 irp.WrmVersion = "10.4"와 같은 값을 할당했습니다.

J.Random Coder의 답변 및 초기화 버전 필드.


private string version = "10.4';

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.