C # 'da bool ve Boolean türleri arasındaki fark nedir


Yanıtlar:


382

booliçin bir takma ad System.Booleangibi intdiğer adıdır System.Int32. Takma adların tam listesine buradan bakın: Yerleşik Türler Tablosu (C # Referansı) .


5
Yukarıdaki bağlantıdan microsoft C # türü anahtar kelimeler ve takma adları değiştirilebilir diyor Ama neden takma adlara ihtiyacımız var, Benim açımdan Boolean bool sonra daha anlamlı ve Int32 daha sonra int neden alias daha anlamlı ???
Asim Sajjad

6
@asim: tembellik? Daha az yazarak Sistemi içe aktarma ihtiyacını ortadan kaldırır. Şahsen takma adları tercih ederim. "İnt" yazmak, "Int32" yazmaktan çok daha hızlıdır.
Kent Boogaart

8
@asmin: Bu bir C olayı. int, float vb. C ve C ++ programcılarına tanıdık anahtar kelimelerdir, bu nedenle Microsoft bu takma adları tutarlılık için kullanmaya karar vermiştir.
Mike Chamberlain

42
@Mikey Java'nın bu takma adları tutarlılık için kullanmaya karar verdiğinden eminim ve Microsoft Java'yı tutarlılık için kullanmaya karar verdi ... :-)
max

19
@MaxWell yılında Java booleanve Booleanaynı şey değildir. Biri ilkel bir veri türüdür ve diğeri bir nesnedir.
Rosdi Kasım

48

Bir tane olduğuna inanmıyorum.

bool sadece bir takma ad System.Boolean


22

Aynı birdir. bool sadece Boolean için bir takma addır.



15

Bunun yıllar sonra farkındayım ama aynı soru ile google'dan bu sayfada rastladım.

MSDN sayfasında şu an için küçük bir fark var.

VS2005

Not:

Null değeri de olan bir Boolean değişkenine ihtiyacınız varsa, bool kullanın. Daha fazla bilgi için bkz. Null Edilebilir Türler (C # Programlama Kılavuzu).

VS2010

Not:

Null değeri de olan bir Boolean değişkenine ihtiyacınız varsa, bool? Kullanın. Daha fazla bilgi için bkz. Null Edilebilir Türler (C # Programlama Kılavuzu).


2
Bu tarafından takıldı - bu belgelerinde bir hata gibi görünüyor. Önce VS2005 sayfasını gördüm (benim için Google sıralamasında daha yüksek görünüyor!) Ve bunun boolnull içerebileceğini, ancak Booleanyapamayacağını ima ettiğini düşündüm . Eskiden yeni belgelere bir bağlantı olmasına rağmen, yeni ?farkı tek farkı fark edecek kadar okumadım .
Logan Pickup

1
Üzgünüm ama bu yanlış, bool veya Bolean'ı null değerine dönüştürebildiğinden null değerine dönüştüremezsiniz
Timothy Macharia

13

Onlar aynı. Boolean, C # ve VB.Net arasındaki dönüşümü basitleştirmeye yardımcı olur. Çoğu C # programcısı 'bool'u tercih etme eğilimindedir, ancak hem VB.Net hem de C #'ın çok olduğu bir dükkandaysanız, her iki yerde de çalıştığı için Boolean'ı tercih edebilirsiniz.


10

Söylendiği gibi, onlar aynı. İki vardır çünkü bool bir C # anahtar sözcüğü ve Boolean bir .Net sınıfıdır.


Platformlar arası uyumluluk için bool daha iyi olmaz mıydı?
Beep beep


5

bool, Boolean sınıfı için bir diğer addır. Sınıfta bir yöntem çağırırken bir değişken ve sınıf adı bildirirken diğer adı kullanın.


8
İlgisiz - neden ikisini de kullanasınız? Birini veya diğerini kullanmayı savunuyorum. Ya takma adları kullanın ya da kullanmayın, aksi takdirde kod dağınık ve tutarsız görünüyor.
Kent Boogaart

2
Her ikisini de kullanmadığınızda dağınık görünüyor. Veri türünü bildirmek için diğer adı kullanın ve statik yöntemlere erişirken actuall sınıf adını kullanın: string x = String.Format ("Today is: {0}", DateTime.Now);
Scott Dorman

1
Böylece şunu yaparsınız: int i = Int32.Parse (...); ? Bununla ilgili birkaç problemim var. İlk olarak, VS varsayılan olarak farklı vurgulayacaktır (Bunu değiştirebileceğinizi biliyorum, ancak çoğu geliştirici sadece varsayılan sözdizimi vurgulamayı kullanır). İkincisi, özellikle uzunlarla (uzun / Int64) arama yapmak daha zordur.
Kent Boogaart

4
Evet, tam olarak böyle yapılmalı. int sınıf adı değildir, üzerinde yöntem çağırmamalısınız. Öte yandan, yerleşik tiptir ve Int32 i'yi tanımlar; çok ayrıntılı ve doğal değil.
AviD

5
takma adları ve sınıf adlarını karıştırmak kod netliğine hiçbir şey eklemez. Bir tane seçin ve onunla sopa, imho
Arne Claassen

2

Onlar aynı, Bool sadece Sistem. Hem V # hem de Vb ile çalıştığından, bir VB.net programcısıyla çalışırken Boolean kullanın


1

BooleanSadece işe yarayacağınızı unutmayın using System;(genellikle, ancak zorunlu olarak dahil edilmez) (olarak yazmazsanız System.Boolean). boolgerek yokusing System;


0

bool, ilkel türdür, yani değerin (bu durumda true / false) doğrudan değişkente depolandığı anlamına gelir. Boolean bir nesnedir. Boolean türünde bir değişken, bir Boolean nesnesine başvuruyu depolar. Tek gerçek fark depolama. Bir nesne her zaman ilkel türden daha fazla bellek kaplar, ancak gerçekte tüm Boolean değerlerinizi boole dönüştürmek bellek kullanımı üzerinde belirgin bir etkiye sahip olmayacaktır.

Ben hatalıydım; Java ve Boolean ile bu şekilde çalışır. C # 'da, bool ve Boolean referans tipleridir. Her ikisi de değerlerini doğrudan değişkente saklar, her ikisi de boş olamaz ve her ikisi de değerlerini başka bir türde (int gibi) saklamak için bir "convertTO" yöntemine ihtiyaç duyar. Yalnızca Boolean sınıfında tanımlanan statik bir işlevi çağırmanız gerektiğinde hangisini kullandığınız önemlidir.


boolve Booleanbir bir başvuru türü olmadığını, iki farklı türde değildir, bunun üzerine statik bir yöntemini çağırabilirsiniz biri ya tanımlayıcıyı kullanarak türü ve bir aramaya aslında muhtaç değil ConvertTobaşka bir türe dönüştürmek için yöntem.
Servy

2
Doğru değil " boolve Booleanher ikisi de referans türüdür". Sözcükler boolve Booleanher ikisi de aynı türe karşılık gelir ve bu tür, bir referans türü değil, bir değer türüdür.
Tanner Swett

Teşekkürler, ben C # bu alanda java aynı hareket edip etmediğini kontrol etmeye çalışıyordu. Cevap, onu java ile karşılaştıran tek kişidir (kasıtlı olarak olmasa bile). :)
bvdb

-1

bool, Boolean için bir diğer addır. Diğer adlar, kod derlenmeden hemen önce, bir metin dizesini başka bir metinle (notepad ++ içinde search / replace-all gibi) değiştirmektir. Çalışma zamanında birini diğerinin üzerinde kullanmanın bir etkisi yoktur.

Diğer birçok dilde, biri ilkel bir tür ve diğeri bir nesne türü (C # jargon'daki değer türü ve başvuru türü) olacaktır. C # size ikisi arasında seçim yapma seçeneği sunmaz. Boolean sınıfında tanımlanan statik bir yöntemi çağırmak istediğinizde, otomatik olarak Boolean'ı başvuru türü olarak ele alır. Yeni bir Boolean değişkeni oluşturursanız, değişkene otomatik olarak referans türü olarak davranır (Activator.CreateInstance yöntemini kullanmadığınız sürece).


Boolean, bir başvuru türü değil, bir değer türüdür.
Servy

-2

Belki de bool Boolean'dan biraz daha "hafiftir"; İlginçtir, bunu değiştirmek:

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

...buna:

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

... benim cs dosya bir "Sistem kullanarak" filiz neden oldu; Türü tekrar "boole" olarak değiştirmek, yan tümcenin saçının grileşmesine neden oldu.

(Visual Studio 2010, WebAPI projesi)


Sadece System.Booleandeğil Boolean. using System;Buna izin çünkü gösterilmesini edildi Booleandüzgün olarak yorumlanmalıdır System.Boolean. Daha az ayrıntılı olarak daha hafif değil.
Nat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.