我想通過使用條件屬性來代替我的代碼中的「#if TRACE」指令,但不能輕鬆地將這種方法應用於接口。我有辦法解決這個問題,但這非常難看,我正在尋找更好的解決方案。接口成員上的C#條件屬性
E.g.我有一個有條件編譯方法的接口。
interface IFoo
{
#if TRACE
void DoIt();
#endif
}
我不能使用的接口條件屬性:
// Won't compile.
interface IFoo
{
[Conditional("TRACE")]
void DoIt();
}
我能有接口方法只需要調用的具體類有條件的私有方法:
interface IFoo
{
void TraceOnlyDoIt();
}
class Foo : IFoo
{
public void TraceOnlyDoIt()
{
DoIt();
}
[Conditional("TRACE")]
void DoIt()
{
Console.WriteLine("Did it.");
}
}
這會讓我的客戶代碼在非TRACE構建中多次調用'nop'TraceOnlyDoIt()方法。我可以通過界面上的條件擴展方法得到它,但它變得有點難看。
interface IFoo
{
void TraceOnlyDoIt();
}
class Foo : IFoo
{
public void TraceOnlyDoIt()
{
Console.WriteLine("Did it.");
}
}
static class FooExtensions
{
[Conditional("TRACE")]
public static void DoIt(this IFoo foo)
{
foo.TraceOnlyDoIt();
}
}
有沒有更好的方法來做到這一點?
使用[部分方法](http://msdn.microsoft.com/zh-cn/library/wa80x488.aspx)會對你有用嗎? – 2011-03-09 05:40:44
我覺得如果你試圖做到這一點,你可能會在某個地方出現抽象漏洞。跟蹤信息可能比合同細節更多的是實現細節。 – R0MANARMY 2011-03-09 05:47:01
@Jeff M:看不見怎麼樣? – Ergwun 2011-03-09 05:58:09