program story

파생 형식에서 클래스의 정적 멤버를 사용하고 있습니까?

inputbox 2020. 10. 24. 10:14
반응형

파생 형식에서 클래스의 정적 멤버를 사용하고 있습니까?


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

반응형