#c# #methods #interface
Вопрос:
Я пытался понять, как работают интерфейсы, но не смог этого сделать. Моя цель-написать «n» для WriteNorM() в классе writeN и написать «m» для WriteNorM() в классе writeM. Но когда я пытаюсь это сделать, это говорит о том, что «вы пытаетесь преобразовать пустоту в бул!» пожалуйста, помогите.(кстати, не обращайте внимания на названия классов, это всего лишь тестовая программа)
class xd
{
interface Ixd
{
void WriteNorM();
}
class writeN : Ixd
{
public void WriteNorM()
{
Console.WriteLine("n");
}
}
class writeM: Ixd
{
public void WriteNorM()
{
Console.WriteLine("m");
}
}
static void Main()
{
Ixd D = new writeN();
Ixd D1 = new writeM();
Console.WriteLine(D.WriteNorM());
Console.WriteLine(D1.WriteNorM());
}
}
Ответ №1:
Console.WriteLine
ожидает аргумента, но WriteNorM
определяется как
void WriteNorM();
таким образом, он ничего не возвращает, и вы не можете перейти void
к методу.
Концептуально void
метод ничего не возвращает, поэтому нет возвращаемого значения для передачи в другой метод, как вы пытаетесь сделать:
Console.WriteLine(D.WriteNorM()); // is the same as Console.WriteLine(void)
^^^^^^^^^^^^^
void
Изменение вашего кода на
static void Main()
{
Ixd D = new writeN();
Ixd D1 = new writeM();
D.WriteNorM();
D1.WriteNorM();
}
произведет результат, который вы хотите:
n
m
В качестве альтернативы вы можете изменить свой интерфейс, чтобы иметь
string GetNorM();
вместо этого (т. Е. GetNorM
Теперь возвращает string
значение , в которое вы затем можете перейти Console.WriteLine
, вместо void
):
class xd
{
interface Ixd
{
string GetNorM();
}
class writeN : Ixd
{
public string GetNorM()
{
return "n";
}
}
class writeM: Ixd
{
public string GetNorM()
{
return "m";
}
}
static void Main()
{
Ixd D = new writeN();
Ixd D1 = new writeM();
Console.WriteLine(D.GetNorM());
Console.WriteLine(D1.GetNorM());
}
}
Комментарии:
1. Не «устранит проблему и вернется «. Он будет «Выдавать консольный вывод». Незнание разницы-это то, что заставило ОП задать этот вопрос в первую очередь.
2. @BenVoigt — очень хороший момент — » работа » — слабое слово в этой ситуации.