우선, 당신이 예제를 작성하고 확장 메서드의 더 중요한 키워드를 잊어 버린 것처럼 보입니다. 매개 변수 바로 앞에 키워드 "this"가 누락되었습니다. :)
난 당신이 의미 같은데요 :
public static class TradeDataExt
{
public static bool IsActiveTrade(this TradeData tradeData){...}
public static bool IsActiveRisk(this RiskData riskData) {...}
}
좋아, 첫 번째 포인트는 말했다, 지금의 당신의 질문을 살펴 보자 :
이이 요구 사항은 개발자가 피어 슬픔에 의해 구동 다른 유형에 방법을 섞는다 xxxExt 종류로. 컴파일러가 를 보았기 때문에 아직도 유효하다 수입품을 보아서 네임 스페이스.
실제로 확장 메서드가 작동하는 방법의 진실과 정반대입니다.
정적 메서드를 사용하여 정적 클래스를 선언하면 을 "namespace"를 사용하고 클래스 이름이 아닌 것으로 선언하면 자동으로 사용할 수 있습니다! (같은 정적 클래스의 부분 클래스 인 여러 .cs 파일을 가진 프로젝트가있는 시나리오가 아닌 경우 ..... 내가 생각하는 것 이상으로 생각합니다)
이 예제를 살펴보십시오.
namespace Gabriel.Extensions
{
public static class ClassWithSameName
{
public static bool IsActiveTrade(this TradeData tradeData){...}
}
}
namespace John.Extensions
{
public static class ClassWithSameName
{
public static bool IsAGoodDeal(this TradeData tradeData){...}
}
}
예제를 보면 두 클래스 모두 이름이 같지만 서로 다른 네임 스페이스에 있으므로 명시 적으로 각 네임 스페이스의 "사용"을 선언 할 때만 TradeData 클래스가 확장됩니다. 그래서 나는 이것이 당신을위한 길이라고 말하고 싶습니다 :
생성되는 유형 확장자를 제어하기 위해 네임 스페이스를 사용해야하므로 XXXX.Extensions.Validation, XXXXX.Extensions.Calculation과 같은 네임 스페이스를 가질 수 있습니다. XXXXX.Extensions.ServicesProvider 등 ... 같은 네임 스페이스에서 모두를 사용하는 대신 (복잡한 일이 발생할 수 있기 때문에) ... 동일한 네임 스페이스에서 수백 가지의 확장 메서드를 추가하는 것은 모두 최선의 방법이 아닙니다.
코드는 다음과 같아야합니다
namespace TradeDataExtensions.Validation
{
public static class ClassWithSameName
{
public static bool IsActiveTrade(this TradeData tradeData){...}
}
}
namespace TradeDataExtensions.Analytics
{
public static class ClassWithSameName
{
public static decimal ExpectedReturn(this TradeData tradeData){...}
}
}
왜 그냥'공공 부울이 isActive 이러한 넣지 마십시오 {얻을 {...}}'은'TradeData'와'RiskData' 클래스에서? 이것은 나에게 이해가되지 않는다. 귀하가 이미 관리하고있는 클래스의 확장 기능을 왜 사용합니까? –
+1로 @HighCore가 – lexeRoy
을 제안했습니다. 이해가됩니다 ... TradeData/RiskData 라이브러리에 액세스하지 못할 수도 있습니다 !! –