Влияет ли структура файла C # на то, что компилируется?

Влияет ли структура файла C # на то, что компилируется?

Например, повлияет ли порядок членов (с точки зрения того, где он существует в файле) на скомпилированный класс?


person StuperUser    schedule 22.06.2012    source источник
comment
Почему бы просто не попробовать?   -  person sloth    schedule 22.06.2012
comment
... и расскажите нам, что вы узнали?   -  person Daren Thomas    schedule 22.06.2012
comment
... и использовать разные компиляторы для перекрестного сравнения. А потом напишите об этом хороший пост в блоге и сразу станете знаменитым :)   -  person Daren Thomas    schedule 22.06.2012
comment
Нет, AFAIK. C делает, C ++ иногда делает, C # нет. В любом случае вы можете проверить реальный код оператора с помощью декомпилятора .NET Reflector.   -  person 84RR1573R    schedule 22.06.2012
comment
Разве это не скомпилированный файл C #, поэтому вы спрашиваете, влияет ли файл на файл. :П   -  person George Duckett    schedule 22.06.2012
comment
BigYellowCactus, я провел небольшой класс с несколькими участниками и ничего не нашел, но это не доказывает, что это не влияет.   -  person StuperUser    schedule 22.06.2012
comment
@GeorgeDuckett Да, моя грамматика немного двусмысленна в первом абзаце, но я имею в виду полученный скомпилированный IL :)   -  person StuperUser    schedule 22.06.2012


Ответы (3)


Согласно записи в блоге Эрика Липперта, которую я прочитал на днях, компилятор не гарантирует, что две компиляции одного и того же источника в итоге получат один и тот же IL. Однако речь не шла о порядке методов, но я думаю, что это тоже применимо - поэтому я не думаю, что безопасно предполагать какой-либо порядок методов в скомпилированном классе. Я также не ожидал бы какой-либо связи между упорядочением методов исходного файла и порядком методов IL.

person Daren Thomas    schedule 22.06.2012
comment
blogs.msdn.com/b/ericlippert/archive/2012/05/31/ - ссылка на блог. - person RB.; 22.06.2012

Хотя в большинстве случаев порядок не важен, это не относится к анонимным типам:

new{a=1,b=2}

создает другой несовместимый тип для

new{b=2,a=1}
person spender    schedule 22.06.2012
comment
Известны ли вам какие-либо другие случаи, кроме сериализации (stackoverflow.com/questions/3282991/), где важен порядок? - person StuperUser; 22.06.2012

нет никакой гарантии порядка членов.

person Kishore Kumar    schedule 22.06.2012
comment
Вы уверены, что это правильно (имена участников не совпадают)? При использовании чего-то вроде отражения или ILSpy вы можете видеть, что они не изменились. - person George Duckett; 22.06.2012
comment
Я с тобой, @GeorgeDuckett. - person spender; 22.06.2012