3

IUpdatable을 구현하려고합니다.인터페이스 구현시 오류 : 클래스가 인터페이스 멤버를 구현하지 않습니다.

오류 '1 WebRole1.InfoManager'가 'System.Data.Services.IUpdatable.ClearChanges()'인터페이스 멤버를 구현하지 않습니다. 모든 오류는 모든 인터페이스 멤버를 구현하고 있지는 않지만 일부는 구현하고 있습니다. 물론 전부는 아닙니다. 나는 당신이 이해할 수 있기를 바란다.

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Data.Services; 
    using Microsoft.WindowsAzure; 
    using Microsoft.WindowsAzure.ServiceRuntime; 
    using Microsoft.WindowsAzure.StorageClient; 

    namespace WebRole1 
    { 
    public class InfoManager : IUpdatable 
    { 
     private TableServiceContext context; 

    // To Generate DataConnectionString and svcClient 
    private TableServiceContext GetContext() 
    { 
    //Implemented code 
    } 

    public CommentManager() 
    { 
     context = GetContext(); 
    } 


    // To get my table infos 
    public IQueryable<Info> Infos 
    { 
     get 
     { 
      return context.CreateQuery<Info>("Infos").AsTableServiceQuery(); 
     } 
    } 
    // Creating the resource and cheking the compatibility of the type and do an add Object 

    public Object CreateResource(string containerName, string fullTypeName) 
    { 
     //Implemented Code 
    } 

    // Return the instance of the resource represented by the object 
    public Object ResolveResource(Object resource) 
    { 
     return resource; 
    } 

    public void SaveChanges() 
    { 
     context.SaveChangesWithRetries(); 
    } 

    public void setValue(Object targetResource, string propertyName, Object propertyValue) 
    { 
    //Implemented Code 
    } 

} 

}

답변

8

인터페이스이기 때문에 원하는지 여부에 관계없이 모든 구성원을 구현해야합니다.

이 오류는 인터페이스를 완전히 구현할 때까지 사라지지 않습니다. 구현중인 메소드의 범위 내에서 원하는 것을 수행 할 수 있습니다. 예를 들어 NotImplementedException을 발생시킬 수도 있지만 - 은 구현이므로이므로 구현자가 컴파일러를 행복하게 만듭니다.

나는 (여전히 괜찮나이유들을 배워야한다) 무지를 용서하지 않을 것이다하지만, 학습에 도움이와 수있는 팁을 제공 할 것입니다 아무것도, 미래의 생산성 경우 :

에서 비주얼 스튜디오 내에서, 당신은 당신이 VS 당신을 위해 코드를 뱉어 가질 수있는 인터페이스를 구현하는 것입니다 개방 클래스 코드 파일이있을 때 ...

아래는 옵션 Implement Interface 'IMyInterface'을 볼 드롭에서
class MyClass : IMyInterface // <- hover mouse and click the drop down that appears 

, 그것을 클릭하십시오! 그것은 당신을 위해 골격 방법 시체를 자동으로 생성합니다.

+0

그래, 내가 몇 가지 방법이 필요하면 내가 NotImplementedException 인상 할 수있는, 그 빠른, 감사합니다. –

+0

그것이 올바른 접근법 인 반면, 들어가는 것은 좋은 습관이 아닙니다. 동료로서 항상 모든 메소드가없는 인터페이스를 구현하는 이유에 대해 항상 궁금해합니다. 인터페이스가 그러한 구현이 허용되는 경우를 제외하고는 본질적으로 거짓말입니다. – jdmichal

+0

빨리 원한다면 자동 업데이트를위한 업데이트를 참조하십시오. 만약 당신이 그것을 손으로하고 싶다면 메소드 바디를 정의하고 예외 발생을 생략하는 것이 _ throwing_ a throw보다 빠를 것이다. –

1

나는 문제가 무엇인지 이해하지 않습니다. 인터페이스를 구현하는 경우 해당 인터페이스에 모든 메소드를 구현해야합니다. 그렇지 않으면 컴파일러에서 오류가 발생합니다.

+0

구현하는 사람에게도 오류가 발생합니다. –

+0

@ 404Dreamer_ML 예. 메소드를 구현하지 않으면 오류가 발생합니다. 인터페이스를 구현한다는 것은 모든 메소드를 구현한다는 것을 의미합니다. – jdmichal

1

오류가 분명하다고 생각합니다. 물론 모든 인터페이스 구성원을 구현하는 것은 아니며, 물론 필요합니다.

관련 문제