Удалите пожалуйста тему!

  • Автор теми Автор теми plywoods
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 29.12.2008
Повідом.: 93
Удалите пожалуйста тему!

Доброго времени суток. Собственно вопрос:

Книга Эндрю Троелсен -Язык программирования C# 2010
страница 183-184

Например, типу данных System.Boolean могут присваиваться только
значения из набора {true, false}. Вспомните, что все числовые типы данных (а также тип Boolean) представляют собой типы значении. Таким типам значение null никогда не присваивается, поскольку оно служит для установки пустой ссылки на объект:

static void Main(string [ ] args)
{
// Компилятор сообщит об ошибке!
// Типам значения не может присваиваться значение null!
bool myBool = null;
int mylnt = null;
// Здесь все в порядке, потому что строки представляют собой ссылочные типы.
string myString = null;
}


ХОРОШО, читаем дальше...

Если объявить нулевым, например, тип bool, его допустимыми значениями будут true, false и null. Это может оказаться чрезвычайно удобным при работе с реляционными базами данных:confused:

И ЕЩЕ ДАЛЬШЕ:

При попытке создать нулевой ссылочный тип (в том числе нулевой тип string) компилятор будет сообщать об ошибке. ???? 2 абзаца назад создали и написали, что все ок!?


Дальше, толи лыжи не едут, толи я....)))

Где правда?
 
Останнє редагування:
у структурных типов есть обертка, которые расширяет их на null.
в коде к структурному типу нужно дописать вопросительный знак

int? nullableInt = null;
 
Имеется ввиду,переменные типа структур? Они являются значимыми типами,на сколько я знаю. А там, выше написано что нельзя им присваивать нулл. Или нельзя без знака вопроса? А с ним типа можно?
 
Правда в оригинальном издании:

If you attempt to create a nullable reference type (including strings), you are issued a compile-time error.

на самом деле, bool? это синтаксический сахар, т.е. сокращенная запись полного варианта Nullable<bool>, где Nullable<T> - generic структура, в качестве параметра типа допускающая только структурные типы.

Если пока ничего не понятно, то короче: нельзя написать
Код:
string? x= null;

P.S. учись читать книги по программированию на английском
 
Имеется ввиду,переменные типа структур? Они являются значимыми типами,на сколько я знаю. А там, выше написано что нельзя им присваивать нулл. Или нельзя без знака вопроса? А с ним типа можно?
без знака типа нельзя, со знаком типа можно

по факту с "?" - ссылочный тип, в нем содержится структурный тип и возможность быть нулом

1stein, думаешь тс'у понятно что ты ему написал, если он задает вопросы по основам?
 
по факту с "?" - ссылочный тип, в нем содержится структурный тип и возможность быть нулом

значит по факту, вот это: int? x = 123; упакует 123 в ссылочный тип? Наверное здесь не только тс'у надо подучить основы :)
 
без знака типа нельзя, со знаком типа можно

по факту с "?" - ссылочный тип, в нем содержится структурный тип и возможность быть нулом

1stein, думаешь тс'у понятно что ты ему написал, если он задает вопросы по основам?
:D

скачал эту книгу на англ. буду читать)
 
значит по факту, вот это: int? x = 123; упакует 123 в ссылочный тип? Наверное здесь не только тс'у надо подучить основы
я не так писал :) ну хотя да... с ссылочным типом я погорячился... неправ
 
Останнє редагування:
Смешались в кучу кони, люди,
И залпы тысячи орудий
Слились в протяжный вой…
 
Смешались в кучу кони, люди,
И залпы тысячи орудий
Слились в протяжный вой…


Может Вы разложите по полочкам?! :)



Почитал и английский вариант, с переводом, в принципе все нормально...в русской версии, это с пониманием какая то х*йня :(

Value types can never be assigned the value of null, as that is used to establish an empty
object reference:
static void Main(string[] args)
{
// Compiler errors!
// Value types cannot be set to null!
bool myBool = null;
int myInt = null;

и ниже

Thus, if we declare a nullable bool, it could be assigned a value from the set {true, false, null}. This can be extremely helpful when working with relationaldatabases

вообщем понял только то, что значимым типам можно присваивать нулл, но нужно незабывать про знак вопроса....ссылочные типы нельзя писать с вопросом.



и в свою очередь, знак вопроса является сокращенным вариантом записи обобщения System.Nullable<T>....вот только до System.Nullable<T> еще не дочитал, и не представляю, что это за такое!?
 
Останнє редагування:
и в свою очередь, знак вопроса является сокращенным вариантом записи обобщения System.Nullable<T>....вот только до System.Nullable<T> еще не дочитал, и не представляю, что это за такое!?
обобщения, они же generics, посмотри по оглавлению
 
Может Вы разложите по полочкам?! :)

Переменные референсного типа хранят только адрес в памяти, указывая где хранится объект (аналог указателя на объект в С). Если переменная содержит null, значит адрес не указан, т.е. переменная не содержит ссылки на объект.

Переменные value типа хранят сам объект. Поэтому null таким переменным присвоить нельзя, т.к. переменная хранит не ссылку, а сам объект.

nullable типы - это обертка над value типом, позволяющая указать что значение value типа не задано.

string - это референсный тип, поэтому для string нет nullable типа.
 
Назад
Зверху Знизу