Есть ли способ строго соблюдать тип, который можно использовать. (Очень эксплицитное литье) - PullRequest
0 голосов
/ 20 февраля 2012

Есть ли способ "строго" ограничить или принудительно применить тип, который можно использовать.

S <: T

Что-то вроде

Method( value As T ) ' Any Type of T including subtypes of T  
Method( value Is T ) ' Only take a T not a subtype of T

Я могу сделать это во время выполнения

 If TypeOf value Is T Then

Но это проверка во время выполнения, проверка во время компиляции была бы более предпочтительной

Option Strict On

Это ограничивает ее только (неявными) расширениями типа.

Я бы хотел, чтобы все типозависимые выражения были явными.

Возможно ли это?Если так, то как?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Нет, как пользователь типа - вы не можете сказать, будете ли вы принимать производные типы.Если вы являетесь владельцем типа, то вы не можете разрешить производные типы, пометив свой класс как sealed.

При этом ваш запрос противоречит ряду принципов OOD,Вы можете переосмыслить свой дизайн, если это действительно необходимо.

0 голосов
/ 20 февраля 2012

Вы имеете в виду что-то вроде:

private void Method<T>(T mytype) where T: MyClass
{
}

Это возможное решение

...