Centro правильно, что модуль (или класс NotInheritable с общими элементами) является ближайшим эквивалентом статического класса C # . Технически, в этом нет ничего плохого, так как это всего лишь один из способов создания этого типа в VB. Например, вы не можете сказать Public Shared Class Settings
в VB, поскольку вы не можете поместить ключевое слово Shared
в класс.
Сам по себе я бы не назвал это плохой практикой, если конкретное обстоятельство требует наличия модуля, но в противном случае модуль (или другие статические эквиваленты классов), вероятно, не является тем выбором дизайна, который вы хотите использовать для слабосвязанного, тестируемого кода. Кроме того, хотя класс NotInheritable с совместно используемыми членами является более наглядным, чем просто использование модуля, существует как минимум одно обстоятельство, когда вместо него следует использовать модуль.
Когда вам нужно будет использовать модули в VB.Net? Если вы хотите воспользоваться преимуществами методов расширения , тогда это ваш единственный вариант , поскольку, как уже упоминалось, вы не можете создать общий (статический) класс в VB.Net, а также не можете использовать расширения в классах NotInheritable. , Вы должны использовать модуль следующим образом:
Imports System.Runtime.CompilerServices
Public Module StringExtensions
<Extension()> _
Public Function Remove( _
ByVal input As String, _
ByVal subStrings As String()) As String
Return String.Join("", input.Split(subStrings, StringSplitOptions.None)).Trim()
End Function
End Module
В C # вы не можете использовать модули и должны использовать статические классы следующим образом:
public static class StringExtensions
{
public string Remove(this string input, string[] subStrings)
{
return string.Join("", input.Split(subStrings, StringSplitOptions.None)).Trim();
}
}