Я понимаю необязательные параметры, и они мне очень нравятся, но я бы хотел немного больше узнать об их использовании с унаследованным интерфейсом.
Приложение A
interface IMyInterface
{
string Get();
string Get(string str);
}
class MyClass : IMyInterface
{
public string Get(string str = null)
{
return str;
}
}
Теперь я бы подумал, что метод Get
в MyClass
наследует оба метода интерфейса, но ...
'MyClass' не реализует элемент интерфейса'MyInterface.Get ()'
Есть ли для этого веская причина?
Может быть, я должен пойти на это, добавив необязательные параметры в указанный вами интерфейс?Но что по этому поводу?
Приложение B
interface IMyInterface
{
string Get(string str= "Default");
}
class MyClass : IMyInterface
{
public string Get(string str = "A different string!")
{
return str;
}
}
И этот код прекрасно компилируется.Но это не может быть верно, конечно?Затем, немного покопавшись, я обнаружил следующее:
IMyInterface obj = new MyClass();
Console.WriteLine(obj.Get()); // writes "Default"
MyClass cls = new MyClass();
Console.WriteLine(cls.Get()); // writes "A different string!"
Может показаться, что вызывающий код получает значение необязательного параметра на основе объявленного типа объектов, а затем передает его методу,Мне кажется, это немного глупо.Может быть, у необязательных параметров и перегрузок методов есть свои сценарии, когда их следует использовать?
Мой вопрос
Мой код вызова передан экземпляру IMyInterface
и долженВызовите оба метода здесь в разных точках.
Буду ли я вынужден применять одну и ту же перегрузку метода в каждой реализации?
public string Get()
{
return Get("Default");
}