В чем разница между типами 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 для согласованности ... :-)
max

19
@MaxWell В Java booleanи Booleanэто не одно и то же. Один является примитивным типом данных, а другой - объектом.
Росди Касим

48

Я не верю, что есть один.

bool это просто псевдоним для System.Boolean


22

Они один в одном. bool это просто псевдоним для логического.



15

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

На данный момент на странице MSDN есть одно небольшое отличие.

VS2005

Примечание:

Если вам требуется логическая переменная, которая также может иметь значение null, используйте bool. Для получения дополнительной информации см. Обнуляемые типы (Руководство по программированию в C #).

VS2010

Примечание:

Если вам требуется логическая переменная, которая также может иметь значение null, используйте bool ?. Для получения дополнительной информации см. Обнуляемые типы (Руководство по программированию в C #).


2
Меня это смутило - похоже, это ошибка в документации. Сначала я увидел страницу VS2005 (она кажется мне выше в рейтинге Google!) И подумал, что это boolможет содержать ноль, но Booleanне может. Хотя существует ссылка от старой к новой документации, я не прочитал новую документацию достаточно тщательно, чтобы заметить единственную ?разницу.
Логан Пикап

1
Извините, но это неправильно, вы не можете конвертировать bool или Bolean в null, потому что они являются обнуляемыми типами
Timothy Macharia

13

Они одинаковые. Boolean помогает упростить преобразование между C # и VB.Net. Большинство программистов на C # предпочитают «bool», но если вы находитесь в магазине, где много и VB.Net, и C #, то вы можете предпочесть Boolean, потому что он работает в обоих местах.


10

Как уже было сказано, они одинаковы. Их два, потому что bool - это ключевое слово C #, а Boolean - класс .Net.


Так не лучше ли bool для кросс-платформенной совместимости?
Beep Beep


5

bool - псевдоним для логического класса. Я использую псевдоним при объявлении переменной и имени класса при вызове метода в классе.


8
Из интереса - зачем тебе использовать оба? Я выступаю за использование одного или другого. Либо используйте псевдонимы, либо не используйте, иначе код выглядит грязным и непоследовательным.
Кент Boogaart

2
Я думаю, это выглядит грязно, когда вы не используете оба. Используйте псевдоним для объявления типа данных и используйте имя класса actall при доступе к статическим методам: string x = String.Format ("Today is: {0}", DateTime.Now);
Скотт Дорман

1
Итак, вы должны сделать: int i = Int32.Parse (...); ? У меня есть пара проблем с этим. Во-первых, VS по умолчанию будет подсвечиваться по-другому (я знаю, что вы можете изменить это, но большинство разработчиков просто используют подсветку синтаксиса по умолчанию). Во-вторых, поиск труднее, особенно с long (long / Int64).
Кент 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 - это примитивный тип, означающий, что значение (в данном случае true / false) хранится непосредственно в переменной. Булево является объектом. Переменная типа Boolean хранит ссылку на логический объект. Единственная реальная разница - это хранение. Объект всегда будет занимать больше памяти, чем примитивный тип, но в действительности изменение всех ваших логических значений на bool не окажет заметного влияния на использование памяти.

Я ошибался; Вот как это работает в Java с Boolean и Boolean. В C # bool и Boolean являются ссылочными типами. Они оба хранят свои значения непосредственно в переменной, они не могут быть нулевыми, и им обоим требуется метод "convertTO" для хранения их значений в другом типе (например, int). То, какой из них вы используете, имеет значение только в том случае, если вам нужно вызвать статическую функцию, определенную в логическом классе.


boolи Booleanэто не два разных типа, один тип не является ссылочным типом, вы можете вызывать статический метод для этого одного типа, используя любой идентификатор, и вам на самом деле не нужно вызывать ConvertToметод для преобразования его в другой тип.
Обслуживание

2
Это не правильно, что " boolи Booleanоба являются ссылочными типами". Слова boolи Booleanоба относятся к одному и тому же типу, и этот тип является типом значения, а не ссылочным типом.
Таннер Светт

Спасибо, я пытался проверить, действовал ли C # так же, как Java в этом поле. Вы отвечаете только один, который сравнивает его с Java (хотя, возможно, не намеренно). :)
bvdb

-1

bool - это псевдоним для логического выражения. Псевдонимы - это замена одной строки текста другой (например, search / replace-all в notepad ++) непосредственно перед компиляцией кода. Использование одного над другим не имеет никакого эффекта во время выполнения.

В большинстве других языков один будет примитивным типом, а другой - типом объекта (тип значения и ссылочный тип в жаргоне C #). C # не дает вам выбора между двумя. Когда вы хотите вызвать статический метод, определенный в логическом классе, он автоматически обрабатывает логический метод как ссылочный тип. Если вы создаете новую логическую переменную, она автоматически обрабатывает ее как ссылочный тип (если вы не используете метод Activator.CreateInstance).


Boolean - это тип значения, а не ссылочный тип.
Обслуживание

-2

Возможно, bool немного легче, чем Boolean; Интересно изменить это:

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

...к этому:

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

... заставил мой cs файл прорасти "using System;" Смена типа обратно на «bool» привела к тому, что волосы оператора использования стали серыми.

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


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