CA1040: 빈 인터페이스를 사용하지 마십시오.
TypeName |
AvoidEmptyInterfaces |
CheckId |
CA1040 |
범주 |
Microsoft.Design |
변경 수준 |
주요 변경 |
원인
인터페이스에서 멤버를 선언하지 않거나 둘 이상의 다른 인터페이스를 구현하지 않습니다.
규칙 설명
인터페이스에서는 동작이나 사용 계약을 제공하는 멤버를 정의합니다. 인터페이스에 의해 설명되는 기능은 상속 계층 구조에서 형식이 나타나는 위치에 관계없이 모든 형식에서 사용할 수 있습니다. 형식에서는 인터페이스의 멤버에 대한 구현을 제공하여 인터페이스를 구현합니다. 빈 인터페이스는 멤버를 정의하지 않습니다. 따라서 구현 가능한 계약을 정의하지 않습니다.
디자인에 형식 구현이 필요한 빈 인터페이스가 포함된 경우에는 인터페이스를 마커 또는 형식 그룹을 식별하는 한 방법으로 사용하는 중일 수 있습니다. 이 식별이 런타임에 수행되는 경우에는 사용자 지정 특성을 사용하여 이를 수행하는 것이 올바른 방법입니다. 이 경우는 특성의 유무 또는 특성의 속성을 사용하여 대상 형식을 식별합니다. 식별을 컴파일 타임에 수행해야 하는 경우에는 빈 인터페이스를 사용할 수 있습니다.
위반 문제를 해결하는 방법
인터페이스를 제거하거나 인터페이스에 멤버를 추가합니다. 빈 인터페이스를 사용하여 형식 집합에 레이블을 지정하는 경우 인터페이스를 사용자 지정 특성으로 바꿉니다.
경고를 표시하지 않는 경우
인터페이스가 컴파일 타임에 형식 집합을 식별하기 위해 사용되는 경우에는 이 규칙에서 경고를 표시하지 않아도 안전합니다.
예제
다음 예제에서는 빈 인터페이스를 보여 줍니다.
Imports System
Namespace Samples
Public Interface IBadInterface ' Violates rule
End Interface
End Namespace
using System;
namespace DesignLibrary
{
public interface IBadInterface // Violates rule
{
}
}
#include "stdafx.h"
using namespace System;
namespace Samples
{
// Violates this rule
public interface class IEmptyInterface
{
};
}