Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/27: Рейтинг темы: голосов - 27, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 16

Обобщенный метод. Обращение к полям неизвестного объекта

23.02.2019, 22:55. Показов 5273. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Мне надо изменить значение переменных в объекте неизвестно типа.
Что-то типа такого:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void ObjectPos<T>(T obj)
        {
            if (Math.Abs(obj.position.X - player.position.X) < graphics.PreferredBackBufferWidth)
            {
                obj.drawPos.X = obj.position;
            }
            else
            {
                obj.drawPos.X = new Vector2(-333, -333);
            }
 
            if (Math.Abs(obj.position.Y - player.position.Y) < graphics.PreferredBackBufferHeight)
            {
                obj.drawPos.Y = obj.position;
            }
            else
            {
                obj.drawPos.Y = new Vector2(-333, -333);
            }
        }
Помогите, пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2019, 22:55
Ответы с готовыми решениями:

Обращение к полям объекта
Вот объявление: class AB { public static int A; public static int B; public AB() { ...

Многоразовое обращение к полям объекта ключевой коллекции
Есть ключевая коллекция users с элементами типа user, каковых несколько тысяч. Цикл foreach по ним всем пробегается, считывая из полей...

Обобщенный метод преобразовать в метод с параметром типа
Добрый день! Есть метод: public void FillListAndDGV&lt;T&gt;(List&lt;Expression&lt;Func&lt;T, object&gt;&gt;&gt; Expr) where T : class ...

5
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
23.02.2019, 23:06
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

MontesCassian, А если я захочу использовать ваш метод с классом string, а в стринге нет drawPos? Сделайте интерфейс/базовый класс в котором будет необходимый функционал и поставьте ограничение на параметр типа.
1
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 16
23.02.2019, 23:11  [ТС]
Lexeq, спасибо. То есть, проблема только в ограничении? Если я ограничу круг типов с которыми может работать метод, это вероятно всего решит проблему?
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
23.02.2019, 23:14
MontesCassian, возможно. Даже обобщения могут не понадобятся.
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
23.02.2019, 23:14
Лучший ответ Сообщение было отмечено MontesCassian как решение

Решение

Для этого нужно указать ограничения типа, например какой-то интерфейс или класс имеющие соответствующие свойства...
Что-то типа такого
C#
1
2
3
4
5
6
7
8
9
    class BaseObj
    {
        public Vector2 drawPos { get; }
        public Vector2 position { get; }
    }
 
    class Unit : BaseObj
    {
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void ObjectPos<T>(T obj) where T : BaseObj
        {
            if (Math.Abs(obj.position.X - player.position.X) < graphics.PreferredBackBufferWidth)
            {
                obj.drawPos.X = obj.position;
            }
            else
            {
                obj.drawPos.X = new Vector2(-333, -333);
            }
 
            if (Math.Abs(obj.position.Y - player.position.Y) < graphics.PreferredBackBufferHeight)
            {
                obj.drawPos.Y = obj.position;
            }
            else
            {
                obj.drawPos.Y = new Vector2(-333, -333);
            }
        }
1
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 16
23.02.2019, 23:16  [ТС]
Lexeq, всё, понял, дошло. Спасибо огромное!

Добавлено через 1 минуту
Someone007, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2019, 23:16
Помогаю со студенческими работами здесь

Свойство неизвестного объекта
Как правильно написать такую функцию, чтобы при передаче туда любого объекта возвращалась длина этого объекта? Предполагается, что свойство...

Обобщенный метод с Nullable типом
Здравствуйте уважаемые! protected T ConvertPresenter&lt;T&gt;(dynamic val, Func&lt;bool&gt; pridicate) where T : class { ...

Обобщенный метод сортировки массива
Что-то не пойму, в чем проблема. Точнее, вижу, что мне пишет VS, но не пойму, что делаю не так. Нужно, чтобы метод сортировки принимал...

Рихтер, обобщенный метод, требуется разжевать
Отрывок из книги: private static void Display(String s) { Console.WriteLine(s); } private static void Display&lt;T&gt;(T o) { ...

Обобщенный метод для сравнения двух чисел
Как создать метод, который будет сравнивать 2 числа с 0 и если они будут оба больше 0, то выводить &quot;Yes&quot;? Пример с типом int ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru