Что происходит с полиморфизмом в C # - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть интерфейс [a] и класс Implementer [b].[b] имеют свои собственные методы помимо реализованных.

//-----------
public interface a
{
void functionA();
}
//-----------

public class b:a
{
void functionA(){}
void functionB(){}

}
//------------

В проекте X внутри решения.Когда я кодирую: [проект - это библиотека классов]

a test = new b();
test.functionB(); //It Works

В другом проекте со ссылками на библиотеку [Консольное приложение]

a test = new b();
test.functionB(); //Error CS1061 --> a doesn't have a method called function b

Извините, но имена на испанском.Интерфейс: pastebin.com/Unm5Adkd, Исполнитель: pastebin.com/wmikck9H, Программа: Консольное приложение: pastebin.com/Yus91hQL ... Спасибо всем за помощь.: Р

1 Ответ

2 голосов
/ 14 декабря 2011

Я предполагаю, что вы спрашиваете, почему вы получаете ошибку CS1061.

Это просто.В вашем консольном приложении, даже если вы создаете экземпляр объекта типа «b» («new b ()»), вы, кажется, присваиваете его переменной, ссылающейся на что-то, что является «a».Интерфейс «a» в соответствии с вашим образцом действительно не содержит метод с именем «functionB ()».

В этом случае у вас есть две опции.

Первый вариант - добавление метода 'functionB () 'также к определению интерфейса:

public interface a {
   void functionA(){}
   void functionB(){}
}

Второй вариант - убедиться, что переменная' a 'в вашем консольном приложении имеет тип' b ':

b a = new b();
a.functionB();

НаПримечание: я бы предложил придерживаться общепринятых правил именования, например, начиная с заглавных букв для имен классов и методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...