Яка різниця між типами bool та Boolean у C #


Відповіді:


382

boolє псевдонімом так System.Booleanсамо, як intі псевдонім для System.Int32. Повний список псевдонімів дивіться тут: Таблиця вбудованих типів (C # Reference) .


5
З вищенаведеного посилання microsoft говорить, що ключові слова типу C # та їх псевдоніми є взаємозамінними, але для чого нам потрібні псевдоніми. З моєї точки зору, Boolean є більш значущим, ніж bool, а Int32 є більш значимим, ніж int, чому тоді псевдоніми ???
Асим Саджад

6
@asim: лінь? Це менше вводити текстів і уникати необхідності імпорту Системи. Особисто я віддаю перевагу псевдоніми. Введення "int" набагато швидше, ніж введення "Int32".
Кент Бугаарт

8
@asmin: Це справа C. int, float тощо - це звичні ключові слова програмістам C і C ++, тому Microsoft вирішила використовувати ці псевдоніми для послідовності.
Майк Чемберлен

42
@Mikey Я майже впевнений, що Java вирішила використовувати ці псевдоніми для послідовності, а Microsoft вирішила використовувати Java для послідовності ... :-)
макс.

19
@MaxWell У Java, booleanі Booleanце не те саме. Один - це примітивний тип даних, а другий - об’єкт.
Росді Касім




15

Я усвідомлюю це через багато років, але я наткнувся на цю сторінку з google з тим же питанням.

На сторінці MSDN існує одна незначна різниця.

VS2005

Примітка:

Якщо вам потрібна булева змінна, яка також може мати значення null, використовуйте bool. Для отримання додаткової інформації дивіться розділ Типи змінних (Посібник з програмування C #).

VS2010

Примітка:

Якщо вам потрібна булева змінна, яка також може мати значення null, використовуйте bool ?. Для отримання додаткової інформації дивіться розділ Типи змінних (Посібник з програмування C #).


2
Мене це зіткнуло - здається, помилка в документації. Я побачив першу сторінку VS2005 (вона для мене виявляється вище в рейтингу Google!) І подумав, що це означає, що вона boolможе містити нуль, але Booleanне може. Незважаючи на те, що існує посилання від старої до нової документації, я не прочитав нову документацію достатньо ретельно, щоб помітити єдину ?різницю.
Логан Пікап

1
Вибачте, але це неправильно, ви не можете перетворити bool або Bolean в нульові, оскільки вони є нульовими типами
Тимофій Мачарія

13

Вони однакові. Boolean допомагає спростити перетворення назад і назад між C # і VB.Net. Більшість програмістів на C #, як правило, віддають перевагу "bool", але якщо ви знаходитесь у магазині, де є багато як VB.Net, так і C #, ви можете віддати перевагу Boolean, оскільки він працює в обох місцях.


10

Як було сказано, вони однакові. Є два, тому що bool - це ключове слово C #, а Boolean - клас .Net.


Так чи не було б кращим для сумісності між платформами?
Звуковий сигнал


5

bool - псевдонім для булевого класу. Я використовую псевдонім при оголошенні змінної та імені класу при виклику методу для класу.


8
З інтересу - навіщо б ви використовували обидва? Я виступаю за використання того чи іншого. Або використовуйте псевдоніми чи ні, інакше код виглядає безладним та непослідовним.
Kent Boogaart

2
Я думаю, що це виглядає безладним, коли ви не використовуєте обох. Використовуйте псевдонім для оголошення типу даних і використовуйте ім'я класу actuall під час доступу до статичних методів: string x = String.Format ("Сьогодні: {0}", DateTime.Now);
Скотт Дорман

1
Так ви зробите: int i = Int32.Parse (...); ? У мене є з цим пара проблем. По-перше, VS буде по-різному виділяти по-різному (я знаю, ви можете це змінити, але більшість розробників просто використовують підсвічування синтаксису за замовчуванням). По-друге, пошук складніше, особливо з longs (long / Int64).
Kent Boogaart

4
Так, саме таким чином слід це зробити. int не є назвою класу, ви не повинні викликати на ньому методи. З іншого боку, це вбудований тип і визначає Int32 i; занадто багатослівний і неприродний.
AviD

5
змішування псевдонімів та імен класів просто нічого не додає до ясності коду. Виберіть один і дотримуйтесь його, імхо
Арне Клаассен

2

Вони однакові, Bool просто System.Boolean скорочений. Використовуйте Boolean, коли ви працюєте з програмістом VB.net, оскільки він працює як з C #, так і з Vb


1

Зауважте, що Booleanви працюєте лише у вас using System;(які зазвичай, але необов'язково, включені) (якщо ви не виписуєте це як System.Boolean). boolне потребуєusing System;


0

bool - це примітивний тип, тобто значення (справжнє / хибне в даному випадку) зберігається безпосередньо у змінній. Булев - об’єкт. Змінна типу Boolean зберігає посилання на булевий об'єкт. Єдина реальна відмінність - це зберігання. Об'єкт завжди займе більше пам'яті, ніж примітивний тип, але насправді зміна всіх ваших булевих значень на bool не матиме помітного впливу на використання пам'яті.

Я був неправий; ось як це працює в java з boolean та boolean. У C #, bool і Boolean - обидва еталонні типи. Обидва вони зберігають своє значення безпосередньо у змінній, обидва вони не можуть бути нульовими, і для обох потрібен метод "converTO", щоб зберігати свої значення в іншому типі (наприклад, int). Має значення лише те, яким ви користуєтесь, якщо вам потрібно викликати статичну функцію, визначену в булевому класі.


boolа Booleanне два різних типи, що один тип не є посилальним типом, ви можете викликати статичний метод з цього одному типу , використовуючи або ідентифікатор, і ви не насправді потрібно викликати ConvertToметод , щоб перетворити його в інший тип.
Сервіс

2
Неправильно, що " boolі Booleanобидва типи посилань". Слова boolі Booleanобидва позначають один і той же тип, і цей тип є типом значення, а не типом посилання.
Tanner Swett

Дякую, я намагався перевірити, чи C # діяв так само, як java в цьому полі. Ви відповідаєте - це єдиний, хто порівнює його з java (навіть, можливо, не навмисно). :)
bvdb

-1

bool - псевдонім для Boolean. Псевдоніми - це замінити один рядок тексту на інший (наприклад, пошук / заміна-все в блокноті ++), безпосередньо перед тим, як скомпілювати код. Використання одного над іншим не впливає на час виконання.

У більшості інших мов один був би примітивним типом, а другий - типом об’єкта (тип значення та тип посилань на жаргоні C #). C # не дає вам можливості вибору між двома. Коли ви хочете викликати статичний метод, визначений в булевому класі, він автоматично магічно розглядає булеві як еталонний тип. Якщо ви створюєте нову змінну Boolean, вона автоматично магічно розглядає її як тип посилання (якщо ви не використовуєте метод Activator.CreateInstance).


Булевий тип значення, а не тип посилання.
Сервіс

-2

Можливо, бул - це "легше", ніж булеве; Цікаво, що змінивши це:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public bool CanUseOnItems { get; set; }
    }
}

...до цього:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public Boolean CanUseOnItems { get; set; }
    }
}

... змусив мій файл cs прорости "за допомогою системи;" Зміна типу назад на "bool" призвело до того, що за допомогою клаузування волосся сіріють.

(Visual Studio 2010, проект WebAPI)


Це System.Booleanшвидше, ніж просто Boolean. Показ using System;відображався, тому що це дозволяло Booleanправильно інтерпретувати як System.Boolean. Насправді не легший настільки, як просто менш багатослівний.
Нат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.