2012-04-06 3 views
1

Как можно сглазить тип в VB.NET или C#, чтобы при использовании псевдонима в качестве типа аргумента в функции, случайно используя неалиасовый тип является ошибкой?Enforce Type Alias ​​в VB.NET

т.е.

Imports AccessSpecifier = System.String 

Module Accessors 
    Delegate Function IoOper(ByRef strm As System.IO.Stream) As Action 
    Public Function accessMethod(ByRef spec As AccessSpecifier) As IoOper 
     ' implementation 
     ' ... 
    End Function 
End Module 

Module Main 
    Public Sub Main() 
     Dim spec As AccessSpecifier = New AccessSpecifier(CType("READ_WRITE", Char())) 
     Dim val = Accessors.accessMethod(spec) 
     System.Console.WriteLine(val.GetType()) 
     Dim shouldFail = Accessors.accessMethod("FAIL_ME") 
     System.Console.WriteLine(shouldFail.GetType()) 
    End Sub 
End Module 

Или, возможно, есть лучший способ пойти по этому поводу?

В целом, я желая IDE, чтобы заставить меня знать, что я делаю, если я выбрасываю Ints вокруг означает Flag с, или State с и Strings вокруг означает Name с, Property с и Record сек ,

Помощь?

+1

Просто поставьте опцию Strict On в верхней части файла исходного кода. –

+0

'Option Strict' предотвращает неявное преобразование. Здесь нет конверсии, потому что типы идентичны. –

+0

Erm, нет, целое не совпадает с строкой. Разве это не то, чего вы пытались избежать? С помощью опции Strict Off компилятор с удовольствием генерирует код * try * для преобразования строки в целое число. С kaboom во время выполнения, когда это не сработает. В противном случае тип динамического набора текста, который программисты vb любят на языке. Рассмотрим C# как язык, который имеет очень строгую типизацию. –

ответ

3

Мне никогда не нравился тип aliasing в .NET. Это делает неточный код, и не сразу понятно, что происходит. Как и в вашем примере, когда человек пошел искать файл AccessSpecifier.vb (или класс), они не найдут его.

Кроме того, Aliasing работает только в рамках вашего проекта и только внутри одного файла кода. Поэтому вам нужно будет определить этот псевдоним во всех файлах кода, где он должен был использоваться.

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

+0

Я полностью забыл о неявных преобразованиях в .NET framework. Спасибо вам за это. –

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