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



Download 6,27 Mb.
Pdf ko'rish
bet244/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   240   241   242   243   244   245   246   247   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

наследование интерфейсов
Сейчас я покажу, как определить тип, реализующий интерфейс, создать экземпляр 
этого типа и использовать полученный объект для вызова интерфейсных методов. 
В C# это делается очень просто, внутренняя реализация чуть сложнее, но об этом — 
немного позже.


336
Глава.13 .Интерфейсы
Интерфейс 
System.IComparable
определяется так (в 
MSCorLib dll
):
public interface IComparable {
Int32 CompareTo(T other);
}
Следующий код демонстрирует, как определить тип, реализующий этот интер-
фейс, и код, сравнивающий два объекта 
Point
:
using System;
// Объект Point является производным от System.Object 
// и реализует IComparable в Point
public sealed class Point : IComparable
{
private Int32 m_x, m_y;
public Point(Int32 x, Int32 y) {
m_x = x;
m_y = y;
}
// Этот метод реализует IComparable в Point
public Int32 CompareTo(Point other) {
return Math.Sign(Math.Sqrt(m_x * m_x + m_y * m_y)
- Math.Sqrt(other.m_x * other.m_x + other.m_y * other.m_y));
}
public override String ToString() {
return String.Format("({0}, {1})", m_x, m_y);
}
}
public static class Program {
public static void Main() {
Point[] points = new Point[] {
new Point(3, 3),
new Point(1, 2),
};
// Вызов метода CompareTo интерфейса IComparable объекта Point
if (points[0].CompareTo(points[1]) > 0) {
Point tempPoint = points[0];
points[0] = points[1];
points[1] = tempPoint;
}
Console.WriteLine("Points from closest to (0, 0) to farthest:");
foreach (Point p in points)
Console.WriteLine(p);
}
}
Компилятор C# требует, чтобы метод, реализующий интерфейс, отмечался 
модификатором 
public
. CLR требует, чтобы интерфейсные методы были виртуаль-


337
Наследование.интерфейсов
ными. Если метод явно не определен в коде как виртуальный, компилятор сделает 
его таковым и, вдобавок, запечатанным. Это не позволяет производному классу 
переопределять интерфейсные методы. Если явно задать метод как виртуальный, 
компилятор сделает его таковым и оставит незапечатанным, что предоставит про-
изводному классу возможность переопределять интерфейсные методы.
Производный класс не в состоянии переопределять интерфейсные методы, 
объявленные запечатанными, но может повторно унаследовать тот же интерфейс 
и предоставить собственную реализацию его методов. При вызове интерфейсного 
метода объекта вызывается реализация, связанная с типом самого объекта. Сле-
дующий пример демонстрирует это:
using System;
public static class Program {
public static void Main() {
/************************* Первый пример *************************/
Base b = new Base();
// Вызов реализации Dispose в типе b: "Dispose класса Base"
b.Dispose();
// Вызов реализации Dispose в типе объекта b: "Dispose класса Base"
((IDisposable)b).Dispose();
/************************* Второй пример ************************/
Derived d = new Derived();
// Вызов реализации Dispose в типе d: "Dispose класса Derived"
d.Dispose();
// Вызов реализации Dispose в типе объекта d: "Dispose класса Derived"
((IDisposable)d).Dispose();
/************************* Третий пример *************************/
b = new Derived();
// Вызов реализации Dispose в типе b: "Dispose класса Base"
b.Dispose();
// Вызов реализации Dispose в типе объекта b: "Dispose класса Derived"
((IDisposable)b).Dispose();
}
}
// Этот класс является производным от Object и реализует IDisposable
internal class Base : IDisposable {
// Этот метод неявно запечатан и его нельзя переопределить
public void Dispose() {
Console.WriteLine("Base's Dispose");
}
}
продолжение



338
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   240   241   242   243   244   245   246   247   ...   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