2017-12-28 79 views
-1

EDIT : SOLVED. 나는 때때로 바보입니다. ... 아래에있는 내 자기 대답 내가 인터페이스와 다형성BaseClass는 일치하는 반환 유형이 없기 때문에 interface.variable을 구현할 수 없습니다.


public interface IFile 
{ 
    List<string> Contents {get;set;} 
} 

public class File : IFile 
{ 
    public List<string> Contents {get;set;} 
} 

public interface ICommandFile : IFile 
{ 
    new List<ICommandFileLine> Contents {get;set;} /*ICommandFileLine is defined in the code as well, but I don't believe this is pertinent to the issue I am having.*/ 
} 

public class CommandFile : File, ICommandFile 
{ 
    public new List<ICommandFileLine> Contents {get;set;} 
} 

을 사용하여 다음과 같은 C#을 .Net4.5 코드에서 일하고 있어요

를 참조하십시오

위의 방법을 시도해 보면 사전 컴파일러가 다음과 같이 불평합니다.

CommandFile이 인터페이스 멤버 인 "ICommandFile.Contents"를 구현하지 않습니다. 그것은 "목록 [ICommandFileLine]"

인터페이스 멤버 "목록 ICommandFile.Contents"의 일치 반환 유형이 없기 때문에 'File.Contents는' "ICommandFile.Contents"를 구현할 수 없습니다 구현 는 없습니다.

나는 이해할 수 없다. 새 키워드를 사용하고 있습니다. 기본 클래스를 캡슐화하고 새 변수 유형을 정의하고자 함을 나타내야합니다.

답변

0

CommandFile 클래스에서와 같이 인터페이스 멤버 구현을 'new'로 표시하지 않아야합니다.) 이는 구현 클래스의 멤버가 인터페이스에서 상속 된 멤버와 관련이 없음을 의미합니다.

-1

은 내가 게시 한 후 잘못하지 오분 무슨 짓을했는지 깨달았 :

목록 [ICommandFile] 내용!? 아니요, {get; set;}!

은 변경 :

새 목록 [ICommandFileLine] 내용 = 새로운 ListICommandFileLine을; 내 지역 코드

:

새 목록 [ICommandFileLine] 내용 {; 세트;에서 얻을 수

얼마나 당황 ...

나는 인터페이스를 구현하고 만들기 위해 여전히 비교적 새로운 해요 이러한 실수는 수시로 발생합니다.

+0

당신이 대답하기에 충분하다면, 당신은 그것을 포맷하기에 충분합니다. :) –

+0

글쎄, 나는이 사이트의 펑키 마크를 부여 할 수있을뿐만 아니라 내 OP와 답장을 포맷했다. 그것이 당신에게별로 중요하지 않다면, 그리고 당신은 이미 당신이 능력을 가지고 있음을 입증 했으므로, 내 손님이 되십시오. –

1

일반 인터페이스 - IFile<T>을 사용해보세요. 그렇다면 ICommandFileIFile<CommandLine>.을 구현합니다. 아이디어를 얻으시겠습니까?