파생 형식에서 클래스의 정적 멤버를 사용하고 있습니까?
Resharper 4.1을 사용하면서 "파생 된 유형을 통해 유형의 정적 멤버에 액세스"라는 흥미로운 경고가 표시됩니다. 다음은이 문제가 발생하는 코드 샘플입니다.
class A {
public static void SomethingStatic() {
//[do that thing you do...]
}
}
class B : A {
}
class SampleUsage {
public static void Usage() {
B.SomethingStatic(); // <-- Resharper warning occurs here
}
}
B를 통해 A의 정적 멤버를 사용할 때 어떤 문제가 있는지 아는 사람이 있습니까?
오해의 소지가있는 한 곳은 정적이 팩토리 메서드 인 경우입니다. 예를 들어 WebRequest클래스에는 Create파생 클래스를 통해 액세스 할 경우 이러한 유형의 코드를 작성할 수 있는 팩토리 메서드 가 있습니다.
var request = (FtpWebRequest)HttpWebRequest.Create("ftp://ftp.example.com");
여기 request에 유형이 FtpWebRequest있지만 메서드가 실제로 (기본 클래스) 에 정의되어 HttpWebRequest있음에도 불구하고 (형제 클래스) 에서 생성 된 것처럼 보이기 때문에 혼란 스럽습니다 . 다음 코드는 의미가 동일하지만 더 명확합니다.CreateWebRequest
var request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com");
궁극적으로 파생 유형을 통해 정적에 액세스하는 데 큰 문제는 없지만 그렇게하지 않으면 코드가 더 명확 해집니다.
B.SomethingStatic()SomethingStatic의 구성원 인 진술을 작성합니다 B. 이것은 사실이 아닙니다. SomethingStatic은 분명히의 회원입니다 A. 이 멤버에 액세스 할 자격이 있다는 사실 B(가의 일원 인 것처럼는 B) 편의상의 문제이다. a B로 인증되었을 때 액세스 할 수 있다는 사실 은 IMO입니다.
경고가 아니라 일반적으로 제안 일뿐입니다. 불필요하게 무언가에 의존하고 있습니다.
나중에 B가 A를 상속 할 필요가 없다고 결정했다고 가정 해 보겠습니다. Resharper의 조언을 따르면 해당 코드 줄을 수정할 필요가 없습니다.
그래, 나도 봤는데, 불필요했기 때문에 그냥 경고라고 생각 했어. A.SomethingStatic();같은 일을 할 것입니다.
참고 URL : https://stackoverflow.com/questions/660132/using-a-classs-static-member-on-a-derived-type
'program story' 카테고리의 다른 글
| C #의 비트 필드 (0) | 2020.10.24 |
|---|---|
| Eclipse 용 선호하는 Ruby 플러그인? (0) | 2020.10.24 |
| C # 람다 식 역방향 <= (0) | 2020.10.24 |
| '아토이'라는 이름은 어디에서 유래 되었습니까? (0) | 2020.10.24 |
| Haskell의 예외 처리 (0) | 2020.10.24 |