#c# #.net
#c# #.net
Вопрос:
Я изучаю C #. Ниже приведен код моей программы. Я не понимаю, почему я могу объявить два идентичных метода с разными модификаторами доступа, но один с явным использованием интерфейса в классе, который реализует интерфейс. Я вижу своими глазами, что я просто могу, вот и все. Но я не понимаю логики. Один интерфейс и один и тот же метод. В классе без реализации интерфейса этот трюк не работает.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
}
}
interface IMyInterface
{
void MyMethod();
}
class MyClass : IMyInterface
{
public void MyMethod()
{
Console.WriteLine(1);
}
void IMyInterface.MyMethod() //No error
{
Console.WriteLine(1);
}
}
class MyOtherClass
{
public void MyOtherMethod()
{
Console.WriteLine(1);
}
void MyOtherMethod() //Error CS0111
{
Console.WriteLine(1);
}
}
}
Комментарии:
1. docs.microsoft.com/en-us/dotnet/csharp/programming-guide/… Метод, зависящий от интерфейса, недоступен в классе, а метод, зависящий от класса, недоступен в интерфейсе, поэтому вы увидите разное поведение в зависимости от того, обращаетесь ли вы к экземпляру как к экземпляру класса или к экземпляру интерфейса.
2. В одном классе вы реализуете интерфейс, что означает, что существует локальная версия и интерфейсная версия метода. В другом случае вы пытаетесь объявить один и тот же метод с разными модификаторами, что невозможно, поскольку он находится в том же классе, и компилятор не будет знать разницы.
3. К Алику. Спасибо. Теперь понятно. В MyClass это на самом деле разные методы, как вы сказали.
4.
void IMyInterface.MyMethod()
является явной реализацией интерфейса. Вы можете думать о нем так, как будто он принадлежит не классу, а интерфейсу — и он доступен только в том случае, если вашим ссылочным типом является сам интерфейс.