왜 ReSharper에서는 IGeneric<TGeneric>
에 있지만 ISimple
인터페이스에 대한 가능한 무한 상속 경고 주는가?C#을 ReSharper에서 : 가능한 무한 상속
// api
public interface INodeBase<TNode>
where TNode : INodeBase<TNode>
{
TNode Parent { get; set; }
List<TNode> Children { get; set; }
}
public interface INode<TValue>
: INodeBase<INode<TValue>>
{
TValue Value { get; set; }
}
public interface IBelongToNodeBase<TOwner>
where TOwner : INodeBase<TOwner>
{
TOwner Owner { get; set; }
}
// All good
public interface ISimple
: IBelongToNodeBase<INode<ISimple>>
{
}
// Possible infinite inheritance
public interface IGeneric<TGeneric>
: IBelongToNodeBase<INode<IGeneric<TGeneric>>>
{
}
ReSharper의 인텔리 센스와 관련된 문제 일 수 있습니까? 이것은 실제 사례 시나리오에서 나오며 코드는 아무런 문제없이 컴파일되고 실행됩니다.
"_ 가능성 _ 무한 상속"이라고 말한 이후로 무한 상속으로 이어지는 방식으로'IGeneric '을 구현하는 클래스를 선언 할 수 있다고 생각합니다. 그러나 결코 이러한 구조물 주위에서 머리를 맞을 수는 없습니다. –
'ISimple'대소 문자는 사소한 것이지만 일반적이지 않습니다. 질문을 편집하고'인터페이스 IGenericNoProblem : INode '예제를 사용해야합니다. 이 경우 경고는 인터페이스를 구현하는 클래스에만 표시되고 'IGeneric '처럼 인터페이스 자체에는 표시되지 않습니다. 이 사람이 나에게 경고를하지 않는 이유 –