// , using System;
// , class Gen<T> {
ob;
public Gen( ) { ob = ;
}
// ob. public GetOb() { return ob;
}
}
// , Gen. class Gen2<T>: Gen<T> {
public Gen2(T o): base(o) {
II...
}
class GenHierDemo { static void Main() {
Gen2<string> g2 = new Gen2<string>("");
Console.WriteLine(g2.GetOb());
Gen 2 Gen. Gen 2 .
class Gen2<T>: Gen<T> {
Gen2 Gen. , , Gen2, Gen. , :
Gen2<string> g2 = new Gen2<string>("");
string Gen. ob Gen2, Gen, string.
, Gen2 , Gen. , , , .
, , . , Gen2 .
// , using System;
// , class Gen<T> {
ob; //
// . public Gen(T ) { ob = ;
}
// ob. public GetOb () {
Return ob;
}
}
// , Gen. // V. class Gen2<T, V>: Gen<T> {
V ob2;
public Gen2(T , V o2): base (o) {
ob2 = o2;
}
public V Get0bj2() { return ob2;
' }
}
11 Gen2. class GenHierDemo2 { static void Main() {
// Gen2 // string int.
Gen2<string, in.t> x =
new Gen2<string, int>(" : ", 99);
Console.Write(x.GetOb());
Console.WriteLine(x.GetObj2());
}
}
Gen2 .
class Gen2<T, V>: Gen<T> {
, Gen; V , Gen2. 2 , GetOb j 2 (). Main () Gen2 string V int. .
|
|
: 99
. . .
// // .
Using System;
// , class NonGen { int num;
public NonGen(int i) { num = i;
}
public int GetNum() { return num;
}
}
// , class Gen<T>: NonGen {
T ob;
public Gen(T , int i): base (i) {
ob = o;
}
// ob. public T GetOb() { return ob;
}
}
// Gen. class HierDemo3 {
static void Main() {
// Gen string.
Gen<String> w = new Gen<String>("", 47);
Console.Write(w.GetOb() + " ");
Console.WriteLine(w.GetNum());
}
}
.
47
, Gen NonGen .
class Gen<T>: NonGen {
NonGen , . , , Gen, NonGen . , Gen NonGen , .. - .
, . , GetOb ().
// , using System;
// , class 'Gen<T> { protected ob;
public Gen(T ) { ob = ;
}
// ob. .
public virtual T GetOb () {
Console.Write(" GetOb () Gen" + " : "); return ob;
}
}
// , Gen. // GetOb (). class Gen2<T>: Gen<T> {
public Gen2 (T o): base(o) { }
// GetOb(). public override T GetOb() {
Console.Write(" GetOb() Gen2" + " : "); return ob;
}
}
// , class OverrideDemo { static void Main() {
// Gen int.
Gen<int> iOb = new Gen<int>(88);
// GetOb() Gen.