2015-08-19 9 views
0

Это был вопрос интервью, на который меня спросили. Я не был уверен в ответе.В C# Как константные, так и статические переменные-члены могут:

В C# сопзЬ Оба и статических varables членов может:

А) устанавливается в статическом конструктор, статический метод, или метод экземпляра класса.
B) Изменение после того, как класс был инициализирован в первый раз.
C) Только в конструкторе экземпляра.
D) Доступ без экземпляра класса.
E) Устанавливается набором аксессуаров публичной собственности.

Я выбрал «А», хотя я не знал, что они означают. Я не знал, нужно ли выбрать A или E. Поскольку у меня не хватило времени, я выбрал A. Я, ​​вероятно, должен был выбрал E.

A) Моя проблема с этим заключается в том, что он говорит «метод экземпляра».
B) Они не меняются - False
C) Является конструктором статического метода или класса, называемым «Instance Constructor?»? Я знаю, что у вас может быть статический конструктор.
D) Как вы можете получить доступ к константе без экземпляра? - FALSE
E) Не уверен. Наверное, это может быть правдой.

Может кто-нибудь объяснить? благодаря!

+2

Ну, очевидно, 'D)'. Потому что все остальные ответы либо окажутся неверными ни для одного (или для обоих). – code4life

ответ

4

В C# сопзЬ Оба и статических varables членов может:

А) устанавливается в статическом конструктор, статический метод, или метод экземпляра класса.
B) Изменение после того, как класс был инициализирован в первый раз.
C) Только в конструкторе экземпляра.
D) Доступ без экземпляра класса.
E) Устанавливается набором аксессуаров публичной собственности.

A) Вы не можете когда-либо установить константу, можно определить только его.Вы можете определить константу в любом месте, где вы можете определить переменную, но само слово set означает, что этот выбор неверен.

B) Вы, безусловно, не может изменить константу, так что это не B.

C) Неправильное, как описано выше (A)

D) Хорошо, вы можете написать MyClass.MyConst и MyClass.MyStatic

E) Неправильно, вы не можете изменить константу.

Так что ответ D.

+0

Большое спасибо за ваше четкое объяснение. –

1

Ответ Д.

Статический член или свойства и константный могут быть доступны без экземпляра.

т.е.

var x = Foo.StaticProperty; 

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

E неверен, потому что вы не можете установить константу вообще.

+0

Спасибо, что нашли время ответить на мой вопрос! Я ценю отзывы. Итак, вы говорите, что вам не нужен экземпляр для использования свойства или статического свойства? Благодаря! Наверное, у меня есть домашнее задание. –

2

Ответ был D. Любой постоянный или статический член, открытый, защищенный или внутренний, может быть доступен за пределами класса без экземпляра.

Подумайте о const как значение типа static readonly переменной. также, отмечая их как const, позволяет оптимизировать использование компиляции при компиляции.

+0

На самом деле оптимизация компилятора, о которой вы говорите, - это время оценки ... 'const' оценивается во время компиляции, а' static' оценивается во время выполнения. – Steve

+1

@Steve Оптимизации, о которых он говорит, относительно 'const', происходят во время компиляции, а не время оценки. 'const' является по существу директивой предварительной обработки, которая заменяет все ссылки на константу на значение константы. Если вы пишете: 'const int myConst = 1; var t = myConst; var o = myConst', он будет скомпилирован в 'int t = 1; int o = 1;' – Rob

+0

Точно @Rob, я не делал различия между 'const' и' static readonly', просто указывая, что const является предпочтительнее в случае значения типа «постоянное значение» –

1

Быстрая разбивка ответов:

A) Ложная, так const s не приготовьтесь в статическом конструкторе.

B) Ложные, вы не можете изменить значение const после объявления его

C) Ложные, опять же, не может установить const с после объявления его. Вы можете установить переменные static в методе экземпляра (и ctors), но не можете изменить const после его определения.

D) True - вам не нужен экземпляр класса для доступа к нему.

E) Ложные, опять же, const s не может быть изменен ...

+0

Спасибо, что нашли время ответить на мой вопрос! Я ценю отзывы –

Смежные вопросы