Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 97
- Предыдущая
- 97/642
- Следующая
static void SendAPersonByReference(ref Person p){ // Изменить некоторые данные в р. p.personAge = 555; // р теперь указывает на новый объект в куче! p = new Person("Nikki", 999);}Как и можно было ожидать, вызываемому коду предоставлена полная свобода в плане манипулирования входным параметром. Вызываемый код может не только изменять состояние объекта, но и переопределять ссылку так, чтобы она указывала на новый объект
Person// Передача ссылочных типов по ссылке.Console.WriteLine("***** Passing Person object by reference *****");...Person mel = new Person("Mel", 23);Console.WriteLine("Before by ref call, Person is:"); // Перед вызовом с передачей по ссылкеmel.Display();SendAPersonByReference(ref mel);Console.WriteLine("After by ref call, Person is:"); // После вызова с передачей по ссылкеmel.Display();Console.ReadLine();Вот вывод:
***** Passing Person object by reference *****Before by ref call, Person is:Name: Mel, Age: 23After by ref call, Person is:Name: Nikki, Age: 999Здесь видно, что после вызова объект по имени
MelNikki• Если ссылочный тип передается по ссылке, тогда вызываемый код может изменять значения данных состояния объекта, а также объект, на который указывает ссылка.
• Если ссылочный тип передается по значению, то вызываемый код может изменять значения данных состояния объекта, но не объект, на который указывает ссылка.
Заключительные детали относительно типов значений и ссылочных типов
В завершение данной темы в табл. 4.4 приведена сводка по основным отличиям между типами значений и ссылочными типами.

Несмотря на различия, типы значений и ссылочные типы могут реализовывать интерфейсы и поддерживать любое количество полей, методов, перегруженных операций, констант, свойств и событий.
Понятие типов С#, допускающих null
Давайте исследуем роль типов данных, допускающих значение null
FunWithNullableValueTypesSystem.Booleantruefalse)Booleannull// Ошибка на этапе компиляции!// Типы значений нельзя устанавливать в null!bool myBool = null;int myInt = null;В языке C# поддерживается концепция типов данных, допускающих значение null
nullnullboolnull{true, false, null}nullЧтобы определить переменную типа, допускающего
null?nullnullnullstatic void LocalNullableVariables(){ // Определить несколько локальных переменных // с типами, допускающими null int? nullableInt = 10; double? nullableDouble = 3.14; bool? nullableBool = null; char? nullableChar = 'a'; int?[] arrayOfNullableInts = new int?[10];}Использование типов значений, допускающих null
В языке C# система обозначений в форме суффикса
?System.Nullable<T>nullSystem.Nullable<T>null- Предыдущая
- 97/642
- Следующая
