Вам нужен explicit implementation интерфейса. Метод абстрактного класса method()
реализует необходимость реализации абстрактного метода интерфейса. Поэтому определите метод интерфейса в классе childe
, но явной реализации необходимо вызвать метод интерфейса, но не в классе.
public interface NomiInterface
{
void method();
}
public abstract class Nomi1
{
public void method()
{
Console.WriteLine("abstract class method");
}
}
public class childe : Nomi1, NomiInterface
{
void NomiInterface.method()
{
Console.WriteLine("interface method");
}
}
Вы можете проверить, как вы можете вызвать метод абстрактного класса и реализации интерфейса, присутствующего в Чайльд
childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();
Выход
interface method
abstract class method
С другой стороны, если вы этого не сделаете выполнить явную реализацию интерфейса, тогда реализация, данная в классе childe, не будет вызвана дочерним элементом или объектом интерфейса.
public interface NomiInterface
{
void method();
}
public abstract class Nomi1
{
public void method()
{
Console.WriteLine("abstract class method");
}
}
public class childe : Nomi1, NomiInterface
{
void method() { Console.WriteLine("interface method"); }
}
Создайте объект класса и интерфейса, как мы это делали ранее.
childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();
Выход вы получите
abstract class method
abstract class method
В качестве дополнительной записке вы будете заботиться о именовании для имен классов/методов. Вы можете найти больше о соглашениях об именах here.
Вы заметили, что интерфейс определяет метод с именем 'mehtod', но абстрактный класс определяет' метод'? –
Вы пробовали свой отредактированный ответ? Потому что теперь он компилируется без ошибок. Ваша проблема была в том, что написал Джон Сондерс. – Kikaimaru
Вам не нужно реализовывать его снова, потому что у класса childe уже есть метод «метод», реализованный из его родительского Nomi1. Если вы хотите реализовать его другим способом, сделайте метод «метод» в Nomi1 виртуальным и переопределите его в классе childe. – Kikaimaru