CA1011: 기본 형식을 매개 변수로 전달해 보십시오.
항목 | 값 |
---|---|
RuleId | CA1011 |
범주 | Microsoft.Design |
주요 변경 내용 | 주요 변경 |
원인
메서드 선언에 파생 형식인 정식 매개 변수가 포함되어 있는데 메서드는 기본 형식의 매개 변수 멤버만 호출합니다.
규칙 설명
기본 형식이 메서드 선언의 매개 변수로 지정된 경우 기본 형식에서 파생된 모든 형식을 해당 인수로 메서드에 전달할 수 있습니다. 메서드 본문 내에서 인수를 사용하는 경우 실행되는 특정 메서드는 인수의 형식에 따라 달라집니다. 파생 형식에서 제공하는 추가 기능이 필요 없는 경우 기본 형식을 사용하면 메서드를 더 폭넓게 사용할 수 있습니다.
위반 문제를 해결하는 방법
이 규칙의 위반 문제를 해결하려면 매개 변수의 형식을 기본 형식으로 변경합니다.
경고를 표시하지 않는 경우
이 규칙의 경고는 표시하지 않아도 됩니다.
메서드에 파생 형식에서 제공하는 특정 기능이 필요한 경우
-또는-
파생 형식이나 추가 파생 형식만 메서드에 전달되도록 하려는 경우
이 경우 컴파일러와 런타임에서 제공하는 강력한 형식 검사로 인해 코드가 더 강력해집니다.
예시
다음 예제에서는 이 규칙을 위반하는 FileStream 개체에서만 사용할 수 있는 ManipulateFileStream
메서드를 보여 줍니다. 두 번째 메서드인 ManipulateAnyStream
은 FileStream 매개 변수를 Stream으로 바꾸어 규칙을 충족합니다.
using System;
using System.IO;
namespace DesignLibrary
{
public class StreamUser
{
int anInteger;
public void ManipulateFileStream(FileStream stream)
{
while ((anInteger = stream.ReadByte()) != -1)
{
// Do something.
}
}
public void ManipulateAnyStream(Stream anyStream)
{
while ((anInteger = anyStream.ReadByte()) != -1)
{
// Do something.
}
}
}
class TestStreams
{
static void Main()
{
StreamUser someStreamUser = new StreamUser();
MemoryStream testMemoryStream = new MemoryStream(new byte[] { });
using (FileStream testFileStream =
new FileStream("test.dat", FileMode.OpenOrCreate))
{
// Cannot be used with testMemoryStream.
someStreamUser.ManipulateFileStream(testFileStream);
someStreamUser.ManipulateAnyStream(testFileStream);
someStreamUser.ManipulateAnyStream(testMemoryStream);
}
}
}
}
관련 규칙
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기