Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 136
- Предыдущая
- 136/642
- Следующая

Класс
PtSalesPersonPtSalesPersonsealedsealed class PtSalesPerson : SalesPerson{ public PtSalesPerson(string fullName, int age, int empId, float currPay, string ssn, int numbOfSales) : base(fullName, age, empId, currPay, ssn, numbOfSales) { } // Остальные члены класса...}Наследование с типами записей (нововведение в версии 9.0)
Появившиеся в версии C# 9.0 типы записей также поддерживают наследование. Чтобы выяснить как, отложите пока свою работу над проектом
EmployeesRecordInheritanceCar.csMiniVan.cs// Car.csnamespace RecordInheritance{ //Car record type public record Car { public string Make { get; init; } public string Model { get; init; } public string Color { get; init; } public Car(string make, string model, string color) { Make = make; Model = model; Color = color; } }}// MiniVan.csnamespace RecordInheritance{ //MiniVan record type public sealed record MiniVan : Car { public int Seating { get; init; } public MiniVan(string make, string model, string color, int seating) : base(make, model, color) { Seating = seating; } }}Обратите внимание, что между примерами использования типов записей и предшествующими примерами применения классов нет большой разницы. Модификатор доступа
protectedsealedusing System;using RecordInheritance;Console.WriteLine("Record type inheritance!");Car c = new Car("Honda","Pilot","Blue");MiniVan m = new MiniVan("Honda", "Pilot", "Blue",10);Console.WriteLine($"Checking MiniVan is-a Car:{m is Car}"); // Проверка, является ли MiniVan типом CarКак и можно было ожидать, проверка того, что
mCartrueRecord type inheritance!Checking minvan is-a car:TrueВажно отметить, что хотя типы записей представляют собой специализированные классы, вы не можете организовывать перекрестное наследование между классами и записями. Другими словами, классы нельзя наследовать от типов записей, а типы записей не допускается наследовать от классов. Взгляните на приведенный далее код; последние два примера не скомпилируются:
namespace RecordInheritance{ public class TestClass { } public record TestRecord { } // Классы не могут быть унаследованы от записей // public class Test2 : TestRecord { } // Записи не могут быть унаследованы от классов // public record Test2 : TestClass { }}Наследование также работает с позиционными типами записей. Создайте в своем проекте новый файл по имени
PositionalRecordTypes.csnamespace RecordInheritance{ public record PositionalCar (string Make, string Model, string Color); public record PositionalMiniVan (string Make, string Model, string Color) : PositionalCar(Make, Model, Color);}- Предыдущая
- 136/642
- Следующая
