제 생각에 정적 인 유일한 목적은 메소드가 인스턴스가 아닌 클래스 자체에서 호출되도록하는 것입니다. 그러나 메소드가 비공개 인 경우 클래스 내에서 메소드를 호출 할 수 있습니다. 그래서 뭔가를 개인적이고 정적으로 선언 할 이유가 있습니까? ReSharper는 많은 방법들을 정적으로 만들 것을 권장하며 개인적인 것에 대해서는 요점을 보지 못합니다.전용 메서드를 정적으로 만드는 이유는 무엇입니까?
답변
예 (public
또는 무엇이든) static
메서드가 있고이 메서드는 private
메서드를 사용해야합니다. 그것이 static
이 아니라면 작동하지 않습니다.
public static void Foo1()
{
Foo2(); // compile time error
}
private void Foo2()
{
}
메서드는 정적이 아닌 속성 (예 : 상속과 같은)을 사용해야하는 경우에만 인스턴스 메서드 여야합니다. 따라서 정적으로 만드는 것이 가장 좋습니다.
성능. 그것은 (마이크로) 최적화입니다. CLR은 실행해야하는 메서드를 찾기 위해 더 적은 단계를 수행해야합니다. 자세한 설명
: 정적 메소드를 호출 인스턴스 메소드 호출 반면, 마이크로 소프트 중간 언어 (MSIL)에서 호출 명령을 발생 http://msdn.microsoft.com/en-us/library/79b3xss3.aspx
는 callvirt 명령을 발생시키는 또한 null 객체 참조를 확인합니다. 그러나 대부분의 경우 성능 차이는 두 가지 사이에 큰 차이가 없습니다 .
개체의 상태를 사용하지 않고 구현 세부 사항이있는 메서드가 작성되는 경우이 경향이 있습니다. 그냥 private
으로 만들 수도 있지만 일부 사람들은 메서드가 상태에 닿지 않는다는 것을 완전히 나타내려면 static
으로 만들 것을 선호합니다.
개인적으로 나는 단지 private
으로 갈 것입니다.
개인 메서드가 인스턴스 메서드 또는 필드 또는 속성을 사용하지 않는 경우 정적으로 표시하는 것이 좋습니다.
이렇게하면 IL에서 방출 된 call
연산 코드를 얻습니다.이 opcode는 메서드를 호출하기 전에 "null 검사"를 수행하지 않습니다. 인스턴스 메소드가 callvirt
opcode를 내보내고 메서드를 호출하기 전에 "null checking"을 수행합니다. 이를 통해 성능 이점을 얻을 수 있습니다.
- 1. 이 메서드를 정적으로 호출하는 이유는 무엇입니까?
- 2. C# 개인 메서드를 정적으로
- 3. 이 메서드를 정적으로 표시 할 수없는 이유는 무엇입니까?
- 4. private 메서드를 정적으로 선언
- 5. makeEvent() 메서드를 정적으로 만들면 어떤 이점이 있습니까?
- 6. 이 컨텍스트를 정적으로 만드는 이유는 무엇입니까? 그리고 무엇을해야합니까?
- 7. 클래스가 Java에서 정적으로 선언되는 이유는 무엇입니까?
- 8. gcc 링크를 정적으로 만드는 방법은 무엇입니까?
- 9. USB 포트를 정적으로 만드는 방법은 무엇입니까?
- 10. 스테이지에서 정적으로 비디오 객체를 만드는 방법은 무엇입니까?
- 11. 스크롤 창을 정적으로 만드는 방법은 무엇입니까?
- 12. 제네릭 타입 ArrayList를 정적으로 만드는 방법은 무엇입니까?
- 13. Java로 내부 클래스를 정적으로 만드는 이점은 무엇입니까?
- 14. 로그인 방법이 정적으로 선언되는 이유는 무엇입니까?
- 15. 정적으로 VC CRT에 연결하지 않는 이유는 무엇입니까?
- 16. typedef를 정적으로 사용할 수없는 이유는 무엇입니까?
- 17. 랜덤 수식자를 정적으로 변경해야하는 이유는 무엇입니까?
- 18. 정적 메서드를 메서드 클래스의 인스턴스 내에서 정적으로 호출하는 것이 바람직한 이유는 무엇입니까?
- 19. Java : 왜 정적으로 만들 수있는 메서드를 재정의 할 수 없습니까?
- 20. 다른 클래스의 메서드를 호출하여 비 정적으로 유지
- 21. TraceSource를 정적으로 만드는 이유는 무엇입니까? 나는 클래스에 대한 TraceSource을 만드는 사람들의 본 모든 예를 들어
- 22. KVC를 사용할 수있는 경우 접근 자 메서드를 만드는 이유는 무엇입니까?
- 23. Visual Studio에서 추출 방법 명령이 정적 메서드를 만드는 이유는 무엇입니까?
- 24. 리팩토링하는 방법을 정적으로 만드는 방법은?
- 25. ListView 헤더를 정적으로 만드는 방법
- 26. NullPointerException 모든 메서드를 정적으로 변경했을 때
- 27. 좋은 사례가있을 때 메서드를 정적으로 선언합니까?
- 28. 공용 메서드를 만드는 방법은 무엇입니까?
- 29. Panel.Validate() 메서드를 만드는 방법은 무엇입니까?
- 30. GetLastError()가 내 메서드를 차단하는 이유는 무엇입니까?
나는 모두가 내 질문에 대답한다고 말하고 싶지만 이것은 개인적인 방법을 정적으로 만드는 가장 실질적인 이유 인 것 같아서 대답으로 받아 들일 것입니다. – sab669