我正在玩可選參數,看看他們如何使用接口,我遇到了一個奇怪的警告。我的設置是下面的代碼:從可選參數明確實現接口的警告
public interface ITestInterface
{
void TestOptional(int a = 5, int b = 10, object c = null);
}
public class TestClass : ITestInterface
{
void ITestInterface.TestOptional(int a = 5, int b = 5, object c = null)
{
Console.Write("a=" + a + " b=" + b + " c=" + c);
}
}
編譯器給了我以下警告:
- 爲參數指定「一」不會有任何影響,因爲它適用於一個成員的默認值在不允許可選參數的上下文中使用
- 爲參數'b'指定的默認值不起作用,因爲它適用於在不允許可選參數的上下文中使用的成員
- 指定的默認值F或參數「C」不會有任何影響,因爲它適用於在上下文中使用的部件不允許可選參數
如果我跑這用下面的代碼:
class Program
{
static void Main(string[] args)
{
ITestInterface test = new TestClass();
test.TestOptional();
Console.ReadLine();
}
}
我得到我期望的「」的輸出。
我的問題是警告什麼?它指的是什麼上下文?
@GregC是的,在明確實施的情況下它們沒有任何作用。在隱式實現的情況下,重要的是在接口和類中保持相同的值。否則,您可能會遇到一些非常難以發現的錯誤。 – 2011-04-15 23:18:56
他們在C++中很難發現,所以C#團隊選擇使用默認參數值等待直到最近。我想我在Eric L.的博客上看到了這一點。 – GregC 2011-04-15 23:21:36