2016-02-19 3 views
0

Я начинаю с C#, и у меня есть проблема.C# - Невозможно получить доступ к публичной функции из другого класса

Я создал проект «Приложение Windows Form».

У меня есть класс формы с именем form1, и я добавил класс UserControl с именем usercontrol1. В UserControl1, я назвал тест публичную функцию, которая возвращает 123.

По некоторым причинам я не могу это сделать:

private void Form1_Load(object sender, EventArgs e) 
{ 
UserControl usercontroltest = new usercontrol1(); 
usercontroltest.test(); 
} 

Я получаю ошибку является «пользовательский элемент управления не содержит определение для»

+0

Можете ли вы показать код класса UserControl – evelikov92

+0

разместить код UserControl. Он помечен как статический? Является ли это другой сборкой, которая не была построена? – Dispersia

+1

Изменить 'UserControl usercontroltest = new usercontrol1();' to 'var usercontroltest = new usercontrol1();' –

ответ

7

Это потому, что вы указали свою переменную типа UserControl. Это означает, что компилятор позволит вам использовать только члены, объявленные в UserControl, и классы, на которые он наследует. Фактическим объектом является по-прежнему типа usercontrol1 во время выполнения, но компилятор заботится только о типе переменной времени компиляции переменной, которую вы пытаетесь использовать для вызова метода.

Вы должны изменить объявление использовать конкретный класс:

usercontrol1 usercontroltest = new usercontrol1(); 

Или вы могли бы использовать неявно типизированных локальную переменную, которая будет иметь точно тот же эффект:

var usercontroltest = new usercontrol1(); 

Это исправит неотложную проблему, но:

  • Вы действительно действительно хотите создать здесь новый экземпляр, а не использовать тот, который уже находится в вашей форме?
  • Вы должны войти в привычку следовать .NET naming conventions как можно скорее
+0

проклятый, теперь все понимает! благодаря! У меня не было первого вопроса? спасибо за ссылку;) – Th3lmuu90

+0

@ Th3lmuu90: Ну обычно вы используете элементы управления, которые уже существуют в форме. созданный в Форм-дизайнере. Вполне возможно, что у вас уже есть поле нужного типа. Мы не знаем, что вы пытаетесь сделать с этим элементом управления, но создаете новый экземпляр (и назначаете результирующую ссылку на локальную переменную, а не на поле) * может * быть ошибкой. –

+0

@JonSkeet Почему не [это] (https://msdn.microsoft.com/en-us/library/ms229002 (v = vs.110) .aspx)? –

2
UserControl usercontroltest = new usercontrol1(); 

Хотя это выделяет новый usercontrol1, он присваивает его в базовый класс, UserControl. UserControl не имеет метода test().

Вы, вероятно, хотите:

usercontrol1 usercontroltest = new usercontrol1(); 

вместо этого.

Смежные вопросы