2013-08-28 1 views
1

Я знаю, что это может быть глупый вопрос, но я должен спросить. Могут ли модификаторы доступа (например, protectedprivate) повлиять на видимость методов расширения? (независимо от того, были ли они на классе или на самом методе)Могут ли модификаторы доступа влиять на методы расширения?

Если да, могу ли я показать метод расширения, скрывая его класс? (за пределами сборки как минимум)

ответ

4

private будет скрывать метод от всех, кроме методов в классе методов расширения (что бессмысленно).

protected ничего не значит для статических методов.

Вы можете сделать свой класс Internal так, что он будет скрыт от других сборок.

1

От How to: Implement and Call a Custom Extension Method:

1.Define статический класс содержит метод расширения. Класс должен быть , видимый для кода клиента.

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

Таким образом, содержащий класс должен быть видимым для кода, в котором вы собираетесь использовать метод. И сам метод расширения должен иметь по крайней мере такую ​​же видимость (не менее).


Отвечая на вопрос, если можно скрыть, содержащий класс, но не оставляют метод расширения видимой между сборками: нет, вы не можете. Вы можете попробовать сами: просто создайте статический класс с помощью простого метода расширения (расширяющего любой класс, который вам нравится) в одной сборке; введите класс internal и метод public. Очевидно, вы не сможете использовать этот метод в любой другой сборке, а также в содержащем классе в целом. Несмотря на то, что он выполняет второе правило, указанное выше, он прерывает первый, поскольку класс containg должен быть видимым для кода с использованием метода расширения.

Методы расширения - это синтаксический сахар для вызова static методов. Представьте себе, если вы хотите вызвать простой статический метод, не имеющий доступа к содержащемуся классу. Будет ли это работать? Точно нет.