Что такое [] в C #? - PullRequest
       60

Что такое [] в C #?

15 голосов
/ 10 февраля 2010

Например:

    [TestFixtureSetUp]
    public void Init()
    {
        GetTestRepo(false);
    }

[TestFixtureSetUp] в этом примере, что это делает? Из моего опыта [] обычно относится к спискам.

Ответы [ 6 ]

36 голосов
/ 10 февраля 2010

Атрибуты . Это способ добавить метаданные о методах / свойствах / интерфейсах / классах / пространствах имен для проверки во время выполнения .

Ваш пример добавляет TestFixtureSetUpAttribute к методу. Это позволяет исполнителю теста определить, какой метод в вашем классе следует запускать при настройке текстового фиксатора.

Тестовый прогон загружает вашу тестовую сборку в память во время выполнения. Затем он перечисляет классы, определенные в вашей сборке, которые были помечены определенным атрибутом (независимо от того, что NUnit использует для маркировки тестового класса). Теперь бегун знает, какие классы нужно создавать для запуска тестов. Затем он просматривает методы, определенные в классе, для определения метода, который будет запущен для настройки тестового устройства. Он ищет в каждом методе атрибут, о котором вы спрашивали. Как только он находит этот метод, он знает, что нужно запускать этот метод перед выполнением тестов / каждого теста (что бы это ни значило в NUnit).

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

(В C # вы можете опустить «Атрибут» в имени типа. Компилятор знает, что вы говорите, например, о «SerializableAttribute», когда вы говорите [Serializable])

2 голосов
/ 10 февраля 2010
2 голосов
/ 10 февраля 2010

Атрибуты . Вы можете найти больше информации здесь .

1 голос
/ 10 февраля 2010

Это атрибут . Вроде как метаданные для класса / функции вы используете его.

0 голосов
/ 10 февраля 2010

Вы, кажется, воссоздаете базовый VB / C # faq, задавая один вопрос за раз в SO. К тому же, это хороший способ получить репутацию.

Чтобы ответить на заголовок, [] - это символы, используемые для

  • индексировать в массивы
  • заключить атрибут (метаданные) в метод
  • еще одна вещь, которую я не могу вспомнить

VB.Net использует символы <> для той же цели в метаданных, но использует () для обозначения доступа к массиву.
Java использует для этой же цели символ "@"

Если у вас не было этих специальных символов, компилятор не мог бы интерпретировать то, что вы написали. Не уверен, что еще вы хотите знать. Хотите узнать значение TestFixture?

0 голосов
/ 10 февраля 2010

Они называются атрибутами (аналог аннотаций Java) и компилируются как метаданные.

...