2014-10-28 2 views
3

나는 내 자신의 수학 라이브러리를 가지고 있고 그것을 "수학"(나는 "수학"이라고 부름)이라고 부르고 싶다. 자체 네임 스페이스에 있지만 "수학"이라는 클래스 이름은 여전히 ​​System.Math와 충돌합니다. 내가이 문제를 해결하기 위해 한 일은 단지 명시 적으로 System.Math 함수를 호출 내 라이브러리에 System.Math에 모든 것을 래퍼를 추가 한 후, 나는 수학을 사용하는 모든 파일에시스템을 포장하고 있습니다.

using Math = Yushatak.Libraries.Math; 

을 추가해야합니다. * 기능. 이것이 최선의 방법이라고 생각하지 않습니다. 랩핑이 추가 오버 헤드를 야기 할 수 있다는 것도 두려워합니다. 오버 헤드가 필요한 부분이 아닙니다.

조언? System.Math를 "확장"하는 더 좋은 방법이 있습니까? 이것은 나쁜 아이디어일까요? 나는 "수학"으로 돌아 가야합니까? 전혀 제안? : P 래핑 방법

예 :

public static decimal Abs(decimal value) 
    { 
     return System.Math.Abs(value); 
    } 
+4

아마도 코드 검토 SE에 더 잘 어울릴 수 있습니까? 코드를 보지 않고 오버 헤드에 대해 의견을 말하기 어렵다. 대부분 정적 인 방법이라면 아마 괜찮을 것입니다. 위의'using' 문에도 아무런 문제가 없습니다. 네임 스페이스 충돌을 해결하는 것이 구문이 존재하는 이유입니다. – Yuck

+3

이 질문은 부분 의견을 토대로하고 부분 코드 검토이기 때문에 논제가 아닌 것으로 보입니다. – CodeCaster

+2

'Math/Maths' 클래스가 무엇을하는지에 따라'System.Math' 클래스를 확장하는 것이 가장 좋습니다. – Nunners

답변

5

이 응답 지금 세 개의 서로 다른 부분을 갖는다.

using 문법은 소스 코드의 한 줄을 추가하지 않고 오버 헤드가 없지만 래퍼 메서드는 여러 가지 방법으로 오버 헤드가 있습니다.

  1. System.Math에는 매우 많은 수의 방법이 있습니다. 포장지를 정확하게 재현하는 것은 기껏해야 지루합니다.
  2. JIT에서 내부적으로 수학 함수 호출을 처리하는 방식에 따라 런타임의 성능 오버 헤드가 중요하지 않은 범위에서 다양 할 수 있습니다. 이것은 구현과 플랫폼에 따라 다를 수 있습니다.
  3. 클래스의 컴파일 된 코드가 커집니다.
  4. 수학 기능 중 어떤 기능이 새로운 기능인지 이해하기가 어려울뿐 아니라 단순히 이미 존재했던 것의 래퍼 일뿐입니다.

위의 모든 사항은 다른 전략을 사용하여 예방할 수 있습니다.


이것은 의도적으로 이름 충돌 나의 Name 원래 이름 인 새 클래스 NameEx을 이름을 피하기 위해 매우 일반적입니다. 예를 들어, MathEx 클래스를 만드는 데 관심이 있습니다.


충돌하는 이름을 처리하기 위해 다음과 같이 사용할 수도 있습니다.

using Math = Yushatak.Libraries.Math; 
using SystemMath = System.Math; 

이 자주 ConstantsIServiceProvider라는 이름의 클래스와 특히, 비주얼 스튜디오의 확장 기능 개발에 발생합니다.

+0

OK 이것은 내가 배제해야하는 것과 같은 이유로 래퍼 아이디어를 배제합니다. 나는 이미 그것을 썼다. 그래서 # 1이 문 밖으로 나왔다. 누군가가 근본적으로 나의 원래 "your name"(당신의 MathEx)을 사용하지 않는 것보다 더 나은 해결책을 제시하지 않는다면, "수학 "(아직 취해지지 않은 기능에 대한 가장 짧고 정확한 이름), 나는 이것을 대답으로 표시 할 것이다. – Yushatak

관련 문제