Вопрос

Я видел какой-то код, где Класс импортируется вместо пространства имен, делая доступными все статические члены / методы этого класса.Является ли это особенностью VB?Или другие языки тоже это делают?

Тестовый класс.vb

public class TestClass
    public shared function Somefunc() as Boolean
        return true
    end function
end class

Основной класс.vb

imports TestClass

public class MainClass
    public sub Main()
        Somefunc()
    end sub
end class

Эти файлы находятся в каталоге App_Code.Просто любопытно, потому что я никогда раньше не думал об этом и нигде об этом не читал.

Это было полезно?

Решение

Одна из причин, по которой эта функция существует, заключается в эмуляции опции GlobalMultiUse в Visual Basic 6.0 для создания экземпляра.Visual Basic 6.0 не имеет возможности делать модули общедоступными за пределами библиотеки DLL.Вместо этого вы устанавливаете для свойства instancing значение GlobalMultiUse.Он используется в основном для служебных классов, таких как класс, который экспортирует ряд математических функций.

Каждый раз, когда вы вызываете подпрограмму или функцию в классе с GlobalMultiUse Instancing, Visual Basic 6.0 создает экземпляр класса за кулисами перед вызовом функции.

Им можно злоупотреблять для генерации глобальных функций / переменных со всеми преимуществами и недостатками.

Другие советы

Да, это Языковая функция Visual Basic.Хотя вы можете создавать псевдонимы, используя Оператор использования C #, не похоже, что вы можете импортировать общий класс в область видимости.Честно говоря, я использовал его только один раз в устаревшем проекте, который уже использовал его.Я вижу некоторую ценность, но боюсь, что это может нанести больше вреда, чем пользы для будущей ремонтопригодности вашего кода.

Я использую его всякий раз, когда использую одну и ту же библиотеку много времени.Хорошим примером является System.Math.

C # не поддерживает это, что я нахожу очень раздражающим.

На самом деле, эта функция доступна, потому что это общий доступ функция.Если бы вы удалили модификатор shared, вам все равно пришлось бы создать экземпляр класса, чтобы получить к нему доступ.

Чтобы получить доступ ко всем переменным и всем функциям внутри класса по умолчанию, вы хотели бы наследовать его.

Насколько мне известно импорт класс в основном привязывает к нему прямую ссылку, а не создает какой-либо его экземпляр для вашего использования.

ОТРЕДАКТИРУЙТЕ для большей ясности:Ссылки там являются специфичными для VB ссылками, таким образом, объясняющими функциональность этого, относящегося к VB.NET

подожди, подожди, подожди....

Только сегодня утром я обнаружил, что мы могли бы получить все объекты (классы) внутри любого класса которым нужны их ссылки, используя этот метод / функцию;

Protected Overrides Sub Finalize()
    MyBase.Finalize()
End Sub
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top