Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Классы и методы / 13 сообщений из 13, страница 1 из 1
15.11.2004, 15:39
    #32782577
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
первый вопрос
у меня есть два класса
class1
class2

как мне создать экземпляр класса, имя которого храниться в переменной className

Код: plaintext
1.
2.
3.
className = "class1";
// что то делаем
(object) obj = new class1

второй вопрос есть название метода "m1" и "m2"
string methodName = "m2";

как мне определить:
1) существуетли у класса methodName
2) как мне выхвать methodName
...
Рейтинг: 0 / 0
15.11.2004, 15:41
    #32782587
Игорь В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
См. reflection
...
Рейтинг: 0 / 0
15.11.2004, 15:56
    #32782628
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
например, так (как уже сказали - Reflection):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Type tp=Type.GetType("MyNameSpace.Class1"); 
if(tp!=null)
{ object cl=Activator.CreateInstance(tp);
  MethodInfo m1=tp.GetMethod("m1"); 
  if(m1!=null)
  { m1.Invoke(cl, new object[]{par1, par2, ...});
  }
}
...
Рейтинг: 0 / 0
15.11.2004, 16:04
    #32782657
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
Для первого случая можно попробовать и вот так -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
using System;

namespace ClassNameInTheClassObject
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
            TestClass tc = new TestClass();
            tc.NameClass = tc.GetType().ToString();
            Console.WriteLine(tc.NameClass);
		}
	}

    class TestClass
    {
        public string NameClass;
    }
}

...
Рейтинг: 0 / 0
15.11.2004, 16:06
    #32782660
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
Почти дуплет :)
---
Алгоритм
...
Рейтинг: 0 / 0
15.11.2004, 18:15
    #32782952
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
hDrummerДля первого случая можно попробовать и вот так -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
using System;

namespace ClassNameInTheClassObject
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
            TestClass tc = new TestClass();
            tc.NameClass = tc.GetType().ToString();
            Console.WriteLine(tc.NameClass);
		}
	}

    class TestClass
    {
        public string NameClass;
    }
}


первый случай - все подошло!
спасибо
...
Рейтинг: 0 / 0
15.11.2004, 18:23
    #32782962
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
кузянапример, так (как уже сказали - Reflection):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Type tp=Type.GetType("MyNameSpace.Class1"); 
if(tp!=null)
{ object cl=Activator.CreateInstance(tp);
  MethodInfo m1=tp.GetMethod("m1"); 
  if(m1!=null)
  { m1.Invoke(cl, new object[]{par1, par2, ...});
  }
}

а тут я не все понял:
1)
получаю object cl=Activator.CreateInstance(tp);

теперь, как мне вызвать мой метод methodName="m1"
...
Рейтинг: 0 / 0
15.11.2004, 18:32
    #32782979
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
смущает, что переменная MethodInfo названа m1 :)
тогда так:
Код: plaintext
1.
2.
3.
4.
5.
6.
MethodInfo method=tp.GetMethod("m1");  // получаешь информацию о методе m1
if(method!=null) // если метод существут (и в единственном виде)
{ 
  // вызываем метод у объекта cl
  // и передаем ему необходимые параметры
  method.Invoke(cl, new object[]{param1, param2, ...}); 
}
...
Рейтинг: 0 / 0
15.11.2004, 19:04
    #32783029
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
человека, видимо, смущает, что нигде по тексту не видно вызова типа:
Код: plaintext
1.
2.
3.
...
myClassName.myMethodName();
...

слово Invoke - это и есть вызов метода (это они так по своей американской привычке назвали, так что если еще где-нить встретишь это слово - знай, там что-то вызывается ).
...
Рейтинг: 0 / 0
15.11.2004, 19:59
    #32783078
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
<OFF>
Invoke - Лингва1. заклинать, вызывать духов
2. просить, умолять, упрашивать
3. способствовать совершению (чего-л.)сплошная мистика и ни слова о вызове метода :)
</OFF>
...
Рейтинг: 0 / 0
16.11.2004, 06:00
    #32783304
Стр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
qu-qu...это они так по своей американской привычке...
и вообще они большие шутники

OK расшифровывается как "All Correct"

а наше привычное "подделка преследуется по закону" - переводится "in god we trust" [на их зелени]
...
Рейтинг: 0 / 0
16.11.2004, 09:49
    #32783507
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
Стр qu-qu...это они так по своей американской привычке...
и вообще они большие шутники

OK расшифровывается как "All Correct"

а наше привычное "подделка преследуется по закону" - переводится "in god we trust" [на их зелени]

ОК помнится возникло во время гражданской войны в Штатах, какой-то поставщик для краткости на ящиках с каким-то товаром или оружием ставил ОК.

Откель есть пошла земля американская ;)
...
Рейтинг: 0 / 0
16.11.2004, 11:09
    #32783705
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классы и методы
qu-quчеловека, видимо, смущает, что нигде по тексту не видно вызова типа:
Код: plaintext
1.
2.
3.
...
myClassName.myMethodName();
...

слово Invoke - это и есть вызов метода (это они так по своей американской привычке назвали, так что если еще где-нить встретишь это слово - знай, там что-то вызывается ).
qu-qu ты угодал, именно это меня и смущало,
спасибо за подсказку - начну экспериментировать
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Классы и методы / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]