powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Генерик класс
7 сообщений из 7, страница 1 из 1
Генерик класс
    #38667202
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс
Код: c#
1.
2.
3.
4.
5.
class Record
{
    public int ID {get; set;}
    public string Name {get; set;} 
}



я хочу передать тип в генерик класс
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class Program
    {
        static Record rec;

        static void Main(string[] args)
        {
            rec = new Record { ID = 10, Name = "BST" };
            Type t =  rec.ID.GetType();
            Test<t> test = new Test<t>;  //тут ошибка
        }

        class Test<T>
        {
        }
    }



Получаю: The type or namespace name 't' could not be found (are you missing a using directive or an assembly reference?)
понятно, что где то туплю, вопрос где?
...
Рейтинг: 0 / 0
Генерик класс
    #38667237
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что, Test<Record> перестало подходить? Или нужно динамическое создание? Тогда смотрите MakeGenericType
...
Рейтинг: 0 / 0
Генерик класс
    #38667261
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сколько я помню из с++, генерик классы это не классы в которые можно передать тип класса, а классы которые будут сгенерированы прекомилятором перед компилицией с нужными типами. Не уверен, что в C# так же всё 1 в 1, но принцип тот же.

что мешает передавать в класс который вы создаете Type через конструктор?
и использовать Object класс для передачи значений?
...
Рейтинг: 0 / 0
Генерик класс
    #38667316
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    public class Record
    {
        public int Id { get; set; }
        public string Text { get; set; }
    }
    public class Test<T> where T: new()
    {
        public T Value { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Record rec = new Record() {Id = 100, Text = "Text"};

            Test<Record> tst = new Test<Record>() {Value = rec};

            Console.WriteLine("{0}:{1}", tst.Value.Id, tst.Value.Text);
            Console.ReadLine();
        }
    }
...
Рейтинг: 0 / 0
Генерик класс
    #38667322
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за пример, буду пробовать.
...
Рейтинг: 0 / 0
Генерик класс
    #38667787
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,
можно использовать вот такой выкрутас, для генерации типа когда дженерик параметр имеет произвольный тип.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
 public class Record
    {
        public int Id { get; set; }
        public string Text { get; set; }
    }
    public class Test<T>
    {
        public T Value { get; set; }
    }

    class Program
    {
        static Test<T> Factory<T>(T t) 
        {
            return new Test<T> {Value = t};
        }
        
        static void Main(string[] args)
        {
            Record rec = new Record() { Id = 100, Text = "Text" };

            var tst = Factory(rec);

            Console.WriteLine("{0}:{1}", tst.Value.Id, tst.Value.Text);
            Console.ReadLine();
        }
    }
...
Рейтинг: 0 / 0
Генерик класс
    #38667981
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я вдруг осознал насколько я слабый программист, сколько еще учить и учить. :))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Генерик класс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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