Konstruktorlar bajarilishi ketma - ketligi avval baza konstruktorlaridan boshlanib keyin xosila konstruktorlarga o’tiladi.
G’G’ Demonstratsiya poryadka vo’polneniya konstruktorov.
using System;
G’G’ Sozdaem bazovo’y klass.
class A {
public A() {
Console.WriteLine("Sozdanie klassa A.");
}
}
G’G’ Sozdaem klass, proizvodno’y ot A.
class V : A {
public VO {
Console.WriteLine("Sozdanie klassa V.");
}
}
G’G’ Sozdaem klass, proizvodno’y ot V.
class S : V {
public C( ) {
Console.WriteLine ("Sozdanie klassa S.");
}
}
class OrderOfConstruction {
public static void Main ( ) {
S s q new C ( );
}
}
Ushbu bajarilishlarning ketma-ketligi quyidagi vaziyat bilan tushuntiriladi. Baza sinfi konstruktori xosila sinfi konstruktoriga bog’liq bo’lmagan xolda o’z vazifasini bajaraveradi, ammo xosila sinfi konstruktori baza sinfi konstruktoriga murojat etish extimolligi bor.
Baza sinfiga izoxlar va xosila sinfi ob’ektlari.
S# qat’iy turlangan til bo’lib, bir sinf tiplari ikkinchi sinf ob’ektlariga izox bera olmaydi:
G’G’ Eta programma ne skompiliruetsya.
class X {
int a;
public X(int i) {a q i;)
}
class Y { int a ;
public Y(int i) { a q i;}
}
class IncompatibleRef {
public static void Main ( ) {
X x q new X(10);
X x2;
Y u q new Y(5);
x2 q x; G’G’ OK, obe peremenno’ye imeyut odinakovo’y tip.
x2 q u; G’G’ Oshibka, zdes peremenno’ye raznogo tipa.
}
}
Ammo S# tilida baza sinf ob’ekti shu bazadan kelib chiqqan xosila sinfi ob’ektlariga izox bera oladi.
G’G’ Sso’lka na bazovo’y klass mojet ukazo’vat na
G’G’ ob’ekt proizvodnogo klassa.
using System;
class X {
public int a;
public X(int i) {
a q i;
}
}
class Y : X {
public int b;
public Y(int i, int j) : base(j) {
b q i;
}
}
class BaseRef {
public static void Main() {
X x q new X(10) ;
X x2;
Y u q new Y(5, 6) ;
x2 q x;
G’G’ OK, obe peremenno’ye imeyut odinakovo’y tip.
Console.WriteLine("x2.a: " Q x2.a);
x2 q u; G’G’ Vse ravno ok, poskolku klass Y
G’G’ vo’veden iz klassa X.
Console.WriteLine("x2.a: " Q x2.a);
G’G’ X-sso’lki "znayut" tolko o chlenax klassa X.
x2.a q 19; G’G’ OK
G’G’ x2.bq27; G’G’ Oshibka, v klasse X net chlena b.
}
}
Shu bilan birga bu yerda asosiy rolni izox berilayotgan o’zgaruvchan o’ynaydi va u qaysi ob’ektdagi a’zolarga izox berish imkoniyati mavjudligini aniqlaydi.
G’G’ Peredacha sso’lki na proizvodno’y klass
G’G’ sso’lke na bazovo’y klass.
using System;
class TwoDShape {
double pri_width; G’G’ Zakro’to’y chlen.
double pri height; G’G’ Zakro’to’y chlen.
G’G’ Konstruktor po umolchaniyu.
public TwoDShape ( ) {
width q height q 0.0;
}
G’G’ Konstruktor klassa TwoDShape.
public TwoDShape (double w, double h) {
width q w;
height q h; }
G’G’ Sozdaem ob’ekt, v kotorom shirina ravna vo’sote.
public TwoDShape (double x) {
width q height - x;
}
G’G’ Sozdaem ob’ekt iz ob’ekta.
public TwoDShape (TwoDShape ob) {
width q ob.width;
height q ob.height;
}
G’G’ Svoystva width i height.
public double width
get { return pri_width; }
set { pri_width q value; } }
public double height {
get { return pri_height; }
set { pri_height q value; }
}
public void showDim() {
Console.WriteLine("Shirina i vo’sota ravno’ " Q
width Q " i " Q height);
}
}
G’G’ Klass treugolnikov, proizvodno’y ot klassa TwoDShape.
class Triangle : TwoDShape {
string style; G’G’ Zakro’to’y chlen.
G’G’ Konstruktor po umolchaniyu.
public Triangle() {
style q "null";
}
G’G’ Konstruktor klassa Triangle.
public Triangle (string s,
double w,
double h) :
base(w, h) {
style q s;
}
G’G’ Sozdaem ravnobedrenno’y treugolnik.
public Triangle(double x) : base(x) {
style q "ravnobedrenno’y";
}
G’G’ Sozdaem ob’ekt iz ob’ekta.
public Triangle(Triangle ob) : base(ob) {
style q ob.style;
}
G’G’ Metod vozvrahaet plohad treugolnika,
public double area () {
return width * height G’ 2;
G’G’ Metod otobrajaet tip treugolnika.
public void showStyle () {
Console.WriteLine("Treugolnik " Q style);
}
}
class Shapes7 {
public static void Main() {
Triangle t1 q new Triangle("pryamougolno’y", 8.0, 12.0);
G’G’ Sozdaem kopiyu ob’ekta t1.
Triangle t2 q new Triangle (t1);
Console.WriteLine("Informatsiya o t1: ") ;
t1.showStyle() ;
t1.showDim();
Console.WriteLine ("Plohad ravna " Q t1.area ());
Console.WriteLine() ;
Console.WriteLine("Informatsiya o t2: ");
t2.showStyle() ;
t2.showDim () ;
Console.WriteLine("Plohad ravna " Q t2.area());
}
}
Do'stlaringiz bilan baham: |