2013-11-24 2 views
0

Так что в основном я хотел бы создать расширенное логическое значение. Основание один имеет Equals, функцию CompareTo, но я хотел бы создать тип Его, который имеет некоторые другие функции, методы ...Возможно ли создание расширенного булева?

Например:

extbool eb = true; 

var pos = eb.position 

или

eb.get...() 

Есть ли возможность сделать это на C#?

+3

Это не имеет особого смысла. Методы на булевом языке довольно полны! Вся причина использования Boolean заключается в том, что он просто имеет 2 значения (или 3, если с нулевым логическим)! –

+1

Неясно, какая у вас проблема с созданием таких новых методов класса/структуры или расширения. Просьба уточнить ожидаемое использование и показать ваши существующие попытки. –

+0

Чтобы помочь вам получить лучший ответ, какова мотивация этого вопроса? почему ты хочешь сделать это? Также полезен, каков тип возврата '.position' или' .get() '? – chwarr

ответ

4

Я не совсем уверен в необходимости дополнительных методов для булевого типа, но вы можете использовать extension methods.

Пример (изменить тип возвращаемого на то, что вам нужно):

public static class BoolExtensions 
{ 
    public static int Position(this bool val) 
    { 
     return 2; 
    } 
} 

Зов это:

bool foo = false; 
int position = foo.Position(); 
+0

Вот и все, спасибо! – user1692315

3

Вы можете определить свой собственный класс и переопределить оператор неявного отлитую в булево:

public static implicit operator extbool (bool instance) 
    { 
     //implicit cast logic 
     return extbool ; 
    } 

Теперь вы можете легко:

extbool a = true; 

и наоборот:

public static implicit operator bool (extbool instance) 
    { 
     //implicit cast logic 
     return extbool ; 
    } 

Это должно позволить вам также делать сравнения также отлитые в/из булева. Вот хорошая статья, которая объясняет все

http://www.codeproject.com/Articles/93160/Operator-Overloading-with-Implicit-and-Explicit-Ca

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