powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как получить доступ к экземплру класса
24 сообщений из 24, страница 1 из 1
Как получить доступ к экземплру класса
    #39897548
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, возник вопрос. Используется пользовательский элемент управления. В нем есть public-метод,в который я передаю по ссылке экземпляр класса:

Код: c#
1.
2.
3.
4.
public void Init<T>(ref T userSettings)
{

}



Вопрос в следующем. Как мне получить из других private-методов пользовательского элемента управления этот экземпляр класса с текущими значениями его свойств? Например:

Код: c#
1.
2.
3.
4.
public class Test
{
    int MyProperty{get;set;}
}



Код на форме с пользовательским элементом управления:
Код: c#
1.
2.
3.
4.
5.
6.
7.
Test test = new Test();
test.MyProperty = 1;
MyUserControl.Init<Test>(ref test);

......... 

test.MyProperty = 3;



Задача в том, что мне нужно в private методе моего элемента управления (MyUserControl) получить актуальное состояние экземпляра класса (например, получить актуальное значение свойства MyProperty). Как это организовать в пользовательском элементе управления?
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897558
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сохранить ссылку на этот объект в полях класса элемента управления.
обращаться к объекту по ссылке по мере необходимости

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class MyUiElement : UiElement
{
	private object _myObject;
	
	public void Init<T>(T elem)
	{
		_myObject = elem;
	}
	
	private void MyPrivateMethod<T>()
	{
		var a = ((T)_myObject).Property1;
	}
}


но это гонокодище и разберитесь, что такое REF перед тем как её использовать или не используйте
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897559
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fockewolf
Задача в том
Выглядит как говнокод, извини пожалуйста за прямоту.

Если свойство приватное, значит другой тип не должен его получать. В противном случае, делай его публичным или делай специальный метод для его получения.

Иначе какой смысл вообще в private/public?
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897564
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

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

По сути, задача сводится к тому, что есть пользовательский элемент, который умеет создавать некие шаблоны настроек и сохранять их. И я должен в него передать инстанс произвольного класса, в котором будут храниться настройки, для дальнейшего сохранения
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897571
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну класс Test - он же твой?
Что мешает сделать свойство публичным?
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897574
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Ну класс Test - он же твой?
Что мешает сделать свойство публичным?


Ну у меня публичный, у других - не факт . Я же говорю - будет произвольный класс.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897575
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fockewolf
Ну у меня публичный, у других - не факт . Я же говорю - будет произвольный класс.
Так зачем тебе доступ к приватному свойству неизвестного тебе класса? У тебя что - задача его сериализовать? Ну так используй сериализаторы тогда.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897577
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Fockewolf
Ну у меня публичный, у других - не факт . Я же говорю - будет произвольный класс.
Так зачем тебе доступ к приватному свойству неизвестного тебе класса? У тебя что - задача его сериализовать? Ну так используй сериализаторы тогда.


да не в свойстве дело. Я писал - нужно получить актуальное состояние экземпляра класса . Свойство я привел для примера.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897579
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расшифруй слово "состояние" тогда.
Обычно под состоянием класса подразумевается значения всех полей.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897665
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Я получаю инстанс класса в пользовательский элемент , сериализирую его . Потом что-то делаю на форме с настройками, опять сериализирую. Потом из пользовательского элемента выполняю десериализацию - и возвращаю на форму . Как-то так
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897673
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fockewolf
сериализирую его
какой механизм сериализации используется?
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897678
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fockewolf
Shocker.Pro,

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

Если тебе нужно с объектами разных типов делать что-то одинаковое, то для этого существует полиморфизм , который, в случае C#, делается стандартно через виртуальные методы/свойства, либо через интерфейсы. А ты тут вместо этого какие-то половые фантазии развиваешь с какой-то передачей объектов по ссылке.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897696
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: c#
1.
JsonConvert.SerializeObject()
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897706
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну допустим, хотя непонятно, почему всё это приходится вытягивать, как из партизана.
А тогда вопрос-то в чём?
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897718
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Ну допустим, хотя непонятно, почему всё это приходится вытягивать, как из партизана.
А тогда вопрос-то в чём?


Остался вопрос только с десериализацией

Как уже было сказано - есть:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class MyUiElement : UiElement
{
	private object _myObject;
	
	public void Init<T>(T elem)
	{
		_myObject = elem;
	}
	
	private void MyDeserializeMethod<T>()
	{
		_myObject = JsonConvert.DeserializeObject<T>(строка с джейсоном);
	}

        private void Method()
        {
            MyDeserializeMethod<ОТКУДА ВЗЯТЬ ТИП ЗДЕСЬ?>() 
        }
}
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897727
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ниоткуда. Обобщенный тип должен быть известен на этапе компиляции.
Можно создать объект с заданным типом через рефлексию, потом десериализовать в этот экземпляр.
Но это всё говнокод, как неоднократно упомянуто выше.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897729
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Ну ок, как сделать по другому? Для того, чтобы использовать интерфейсы, надо быть уверенным, что классы имплементируют эти интерфейсы. Такой уверенности нет, скорее, наоборот.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897730
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fockewolf
Такой уверенности нет, скорее, наоборот.
Так нет никакой уверенности, что десериализованный класс будет нормальной копией исходного. Раз он ничего не имплементирует, с большой долей вероятности ты получишь сломанный класс.

Забудь про <T> - это не твой случай. Получай объект, запоминай его тип.
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897734
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897737
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Забудь про <T> - это не твой случай. Получай объект, запоминай его тип.
Кстати, в опциях сериализатора можно задачть, чтобы он сохранял тип внутри сериализованной строки в специальном свойстве. Тогда десериализатор восстановит именно нужный класс, и активатор не нужен и запоминать тип не нужно
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897739
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот
https://www.newtonsoft.com/JSON/help/html/P_Newtonsoft_Json_JsonSerializerSettings_TypeNameHandling.htm


и надо было сразу начать с вопроса о сериализации, нафига было морочить нам голову какими-то приватными свойствами...
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897745
Fockewolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Ок, спасибо большое
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39897824
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используйте JObject или XmlElement\XElement
...
Рейтинг: 0 / 0
Как получить доступ к экземплру класса
    #39898574
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно сохранять сразу в JObject, тогда процедура сохранения и загрузки будет очень просто, а тип содержимое типа динамическим
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как получить доступ к экземплру класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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