Net framework 5, а также среды Visual Studio 2012 и C#


Обобщенные типы и наследование



Download 6,27 Mb.
Pdf ko'rish
bet221/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   217   218   219   220   221   222   223   224   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Обобщенные типы и наследование
Обобщенный тип, как и всякий другой, может быть производным от других ти-
пов. При использовании обобщенного типа с указанием аргументов типа в CLR 
определяется новый объект-тип, производный от того же типа, что и обобщенный 
тип. Например, тип 
List
является производным от 
Object
, поэтому типы 
List
и 
List
тоже будут производными от 
Object
. Аналогично, тип 
DictionaryStringKey
— производный от 
Dictionary
TValue>
, по-
этому тип 
DictionaryStringKey
также производный от 
Dictionary
Guid>
. Понимание того, что определение аргументов типа не имеет ничего общего 
с иерархиями наследования, позволяет разобраться, какие приведения типов до-
пустимы, а какие нет.
Например, пусть класс 
Node
связанного списка определяется следующим об-
разом.
internal sealed class Node {
public T m_data;
public Node m_next;
public Node(T data) : this(data, null) {
}
продолжение



312
Глава.12 .Обобщения
public Node(T data, Node next) {
m_data = data; m_next = next;
}
public override String ToString() {
return m_data.ToString() +
((m_next != null) ? m_next.ToString() : null);
}
}
Тогда код создания связного списка будет выглядеть примерно так:
private static void SameDataLinkedList() {
Node head = new Node('C');
head = new Node('B', head);
head = new Node('A', head);
Console.WriteLine(head.ToString()); // Выводится "ABC"
}
В приведенном классе 
Node
поле 
m_next
должно ссылаться на другой узел, поле 
m_data
которого содержит тот же тип данных. Это значит, что узлы связного списка 
должны иметь одинаковый (или производный) тип данных. Например, нельзя ис-
пользовать класс 
Node
для создания связного списка, в котором тип данных одного 
элемента — 
Char
, другого — 
DateTime
, а третьего — 
String
… Вернее, можно, если 
использовать везде 
Node
, но тогда мы лишаемся безопасности типов на 
стадии компиляции, а значимые типы будут упаковываться.
Следовательно, будет лучше начать с определения необобщенного базового 
класса 
Node
, а затем определить обобщенный класс 
TypedNode
(используя класс 
Node
как базовый). Такое решение позволяет создать связный список с произвольным 
типом данных у каждого узла, пользоваться преимуществами безопасности типов 
и избежать упаковки значимых типов. Вот определения новых классов:
internal class Node {
protected Node m_next;
public Node(Node next) {
m_next = next;
}
}
internal sealed class TypedNode : Node {
public T m_data;
public TypedNode(T data) : this(data, null) {
}
public TypedNode(T data, Node next) : base(next) {
m_data = data;
}
public override String ToString() {


313
Инфраструктура.обобщений
return m_data.ToString() +
((m_next != null) ? m_next.ToString() : String.Empty);
}
}
Теперь можно написать код для создания связного списка с разными типами 
данных у разных узлов. Код будет выглядеть примерно так:
private static void DifferentDataLinkedList() {
Node head = new TypedNode('.');
head = new TypedNode(DateTime.Now, head);
head = new TypedNode("Today is ", head);
Console.WriteLine(head.ToString());
}

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   217   218   219   220   221   222   223   224   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish