C # 4'teki isteğe bağlı parametrelerle, bir arabirimde isteğe bağlı bir parametre belirtirseniz , bu parametreyi herhangi bir uygulama sınıfında isteğe bağlı yapmak zorunda olduğunuzu fark ettim :
public interface MyInterface
{
void TestMethod(bool flag = false);
}
public class MyClass : MyInterface
{
public void TestMethod(bool flag)
{
Console.WriteLine(flag);
}
}
ve bu nedenle:
var obj = new MyClass();
obj.TestMethod(); // compiler error
var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false
İsteğe bağlı parametrelerin neden bu şekilde çalışmak üzere tasarlandığını bilen var mı?
Bir yandan, arayüzlerde belirtilen herhangi bir varsayılan değeri geçersiz kılma yeteneğinin, dürüst olmak gerekirse yararlı olduğunu varsayalım.
Öte yandan, bu bağlantı kesme beton sınıfını ve arayüzü her zaman birbirinin yerine kullanamayacağınız anlamına gelir. Bu, elbette, uygulamada varsayılan değer belirtilirse sorun olmaz, ancak daha sonra somut sınıfınızı arayüz olarak ortaya koyarsanız (örneğin somut sınıfı enjekte etmek için bazı IOC çerçevelerini kullanarak), o zaman gerçekten çağıran varsayılan değere sahip olan nokta, her zaman yine de onu belirtmek zorunda kalacaktır.
MyInterface
ve isteğe bağlı parametre ile çağırabilirsiniz ((MyInterface)obj).TestMethod();
.