C #: Наследовать от булевых?

(как) можно наследовать от булевых? (Или сделайте мой class сопоставимым с Boolean с оператором ‘=’)

class MyClass : Boolean { public MyClass() { this = true; } } class Program { public Program() { MyClass myClass = new MyClass(); if(myClass == true) //do something... else //do something else... } } 

Простой пример:

 public class MyClass { private bool isTrue = true; public static bool operator ==(MyClass a, bool b) { if (a == null) { return false; } return a.isTrue == b; } public static bool operator !=(MyClass a, bool b) { return !(a == b); } } 

где-то в коде вы можете сравнить свой объект с логическим значением:

 MyClass a = new MyClass(); if ( a == true ) { // it compares with a.isTrue property as defined in == operator overloading method // ... } 

Вы не можете. System.Boolean – это структура, и вы не можете получить структуру.

Теперь, почему вы хотите сделать это именно так? Какая главная цель?

Вы могли бы включить оператор неявного преобразования из вашего classа в bool , но лично я бы этого не сделал. Я почти всегда предпочел бы разоблачить имущество, поэтому вы бы напишите:

 if (myValue.MyProperty) 

… Я думаю, что все ясно. Но если вы могли бы дать нам больше реального контекста, мы сможем дать более конкретные советы.

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

 class MyClass { public bool Value { get; set; } public MyClass() { Value = true; } public static implicit operator bool(MyClass m) { return m != null && m.Value; } } class Program { public static void Main() { var myClass = new MyClass(); if (myClass) { // MyClass can be treated like a Boolean Console.WriteLine("myClass is true"); } else { Console.WriteLine("myClass is false"); } } } 

Его можно использовать, как указано выше:

 if (myClass) ... 

Или вот так:

 if (myClass == true) ... 

в то время как ваш пример не работает, вы можете сделать что-то подобное для своих собственных classов, чтобы проверить, соответствует ли значение другим.

http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

 public static bool operator ==(ThreeDPoint a, ThreeDPoint b) { // If both are null, or both are same instance, return true. if (System.Object.ReferenceEquals(a, b)) { return true; } // If one is null, but not both, return false. if (((object)a == null) || ((object)b == null)) { return false; } // Return true if the fields match: return ax == bx && ay == by && az == bz; } public static bool operator !=(ThreeDPoint a, ThreeDPoint b) { return !(a == b); } 

Вы можете («или сделать мой class сопоставимым …»), переопределив оператор ==. Я полагаю, что Джон Скит забыл эту часть вопроса.

Если вы хотите использовать свое значение в operator true if, определите operator true и operator false (вместе с операторами & и | если вы хотите использовать && и || .) ( Эквиваленты VB )

Чтобы ответить больше, я должен был бы знать, что вы пытаетесь сделать (другими словами, почему бы просто не использовать bool напрямую?)