Какое использование является Отражением в.NET? [дубликат]

На самом деле нетрудно создать va_list из NSArray. См. Превосходную статью Мэтта Галлахера на эту тему.

Вот категория NSString, чтобы делать то, что вы хотите:

@interface NSString (NSArrayFormatExtension)

+ (id)stringWithFormat:(NSString *)format array:(NSArray*) arguments;

@end

@implementation NSString (NSArrayFormatExtension)

+ (id)stringWithFormat:(NSString *)format array:(NSArray*) arguments
{
    char *argList = (char *)malloc(sizeof(NSString *) * arguments.count);
    [arguments getObjects:(id *)argList];
    NSString* result = [[[NSString alloc] initWithFormat:format arguments:argList] autorelease];
    free(argList);
    return result;
}

@end

Затем:

NSString* s = [NSString stringWithFormat:@"xxx=%@, yyy=%@" array:@[@"XXX", @"YYY"]];
NSLog( @"%@", s );

К сожалению, для 64-битного формат va_list изменился, поэтому код больше не работает. И, вероятно, не следует использовать в любом случае, поскольку это зависит от формата, который может быть изменен. Поскольку не существует действительно надежного способа создания va_list, лучшим решением будет просто ограничить число аргументов до разумного максимума (скажем, 10), а затем вызвать stringWithFormat с первыми 10 аргументами, что-то вроде этого: ]

9
задан Community 23 May 2017 в 12:08
поделиться

6 ответов

Допустим, вы пишете базовую процедуру сериализации, которая будет сериализовать любой объект в XML. Как бы вы сделали его достаточно универсальным, чтобы он мог работать с любым объектом? Если у вас есть класс, в котором вы знаете все свойства, вы можете легко написать функцию «ToXml ()», в которой вы вручную записываете все свойства в XML. Что, если вы хотите распространить это на ЛЮБОЙ объект? В этом случае вам нужно обдумать свойства во время выполнения и записать их в XML.

Есть много других применений для этого, это первое, что пришло в голову.

10
ответ дан 4 December 2019 в 09:14
поделиться

Есть много применений для отражения. .NET Framework использует его для сериализации и для привязки данных , его также можно использовать для создания инструментов, которые исследуют ваш код, таких как Reflector, FxCop и NUnit, а также каркасы баз данных ORM. Он имеет множество применений во время выполнения: от регистрации конкретных вещей об объекте до Структур внедрения зависимостей . Его также можно использовать для динамического выполнения методов или установки свойств во время выполнения, как это делается с настраиваемыми атрибутами. Его также можно использовать в программировании более высокого уровня, таком как метапрограммирование и самомодифицирующийся код.

4
ответ дан 4 December 2019 в 09:14
поделиться

Я думаю, что статья Википедии об отражении очень хороша:

В информатике отражение - это процесс, с помощью которого компьютерная программа может наблюдать и изменять свои собственные структура и поведение. В парадигма программирования, основанная на отражение называется отражающим программирование. Это особый вид метапрограммирования.

Во многих компьютерных архитектурах, программные инструкции хранятся как данные - отсюда и различие между инструкция и данные - это просто независимо от того, как информация лечится компьютером и язык программирования. Как обычно, "инструкции" "выполняются" и «данные» «обрабатываются»; однако в некоторые языки, программы также могут рассматривать инструкции как данные и поэтому сделайте рефлексивным модификации. Отражение наиболее обычно используется в высокоуровневых виртуальных языки машинного программирования, такие как Smalltalk и языки сценариев, а также реже используется в явно типизированных и / или статически типизированное программирование языки, такие как Java и C.

Reflection позволяет вам получать информацию о типе объекта во время выполнения. Это может быть полезно во многих ситуациях, включая (но ограничиваясь ими) сериализацию и объектно-реляционные сопоставления.

3
ответ дан 4 December 2019 в 09:14
поделиться

Также может быть очень полезной при тестировании вашего приложения, например, модульных тестов или других типов тестовых сред. Используя отражение, вы можете, например, создать XML-файл (или какой-либо другой файл входных данных в подходящем формате) и попросить вашу программу проанализировать его и вызвать методы, определенные в файле. Так работает Фитнес .

2
ответ дан 4 December 2019 в 09:14
поделиться

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

3
ответ дан 4 December 2019 в 09:14
поделиться

Отражение используется, когда во время компиляции вы не знаете, в какое время находится ваш объект, какое действие делать или с каким свойством ...

Вы можете использовать отражение, чтобы найти все объекты типа X в данной сборке , или вызвать какой-либо метод по его имени (полученный из базы данных или файла конфигурации ...), то же самое для установки свойства .... такие вещи (это тот случай, когда мы его использовали)

1
ответ дан 4 December 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: