Нэг ерөнхийлөлтэй класс өөр ерөнхийлөлтэй классаас удамшиж болно. Ингэхдээ удамшилтын төрөл бүрийн хувилбаруудыг ашиглах боломжтой.
Бидэнд дараах суурь
class Person<T>
{
public T Id { get;}
public Person(T id)
{
Id = id;
}
}
Person класс байлаа гэе.
Нэгдүгээр арга нь суурь классийн төрлөөр төрөлжсөн удамшсан классийг үүсгэх.
class UniversalPerson<T> : Person<T>
{
public UniversalPerson(T id) : base(id) { }
}
Классийг хэрэглэх
Person<string> person1 = new Person<string>("34");
Person<int> person3 = new UniversalPerson<int>(45);
UniversalPerson<int> person2 = new UniversalPerson<int>(33);
Console.WriteLine(person1.Id);
Console.WriteLine(person2.Id);
Console.WriteLine(person3.Id);
Хоёрдугаар арга бол ердийн ерөнхийлөлгүй удамшсан классийг үүсгэх юм. Ингэж удамшуулахдаа суурь класст хэрэглэх төрлийг шууд заах хэрэгтэй. Жишээ нь
class StringPerson : Person<string>
{
public StringPerson(string id) : base(id) { }
}
Ингэснээр үүсмэл классийн төрлөөр string төрлийг ашиглах болсон.
Классийн ашиглалт
StringPerson person4 = new StringPerson("438767");
Person<string> person5 = new StringPerson("43875");
// Person<int> person6 = new StringPerson("45545"); // гэж бичиж болохгүй
Console.WriteLine(person4.Id);
Console.WriteLine(person5.Id);
Гуравдахь хувилбар бол үүсмэл классийг суурь классийн универсал параметрээс бүр өөр төрлийн параметрээр төрөлжүүлэх юм. Энэ тохиолдолд суурь класст хэрэглэгдэх төрлийг бас заан өгөх хэрэгтэй. Жишээ нь
class IntPerson<T> : Person<int>
{
public T Code { get; set; }
public IntPerson(int id, T code) : base(id)
{
Code = code;
}
}
Одоо IntPerson төрөл суурь класст хэрэглэж буй төрөлтэй тохирохгүй бас нэгэн төрлөөр төрөлжих боломжтой болсон.
Классийг ашиглах.
IntPerson<string> person7 = new IntPerson<string>(5, "r4556");
Person<int> person8 = new IntPerson<long>(7, 4587);
Console.WriteLine(person7.Id);
Console.WriteLine(person8.Id);
Үүнээс гадна удамшсан класст суурь классийн универсал параметрийг өөрийн параметрүүдтэй хослуулан ашиглаж болно. Жишээ нь
class MixedPerson<T, K> : Person<T>
where K : struct
{
public K Code { get; set; }
public MixedPerson(T id, K code) : base(id)
{
Code = code;
}
}
Дээрх кодод суурь классийн T параметрт нэмэлтээр K шинэ параметрийг оруулсан. Удамшуулахдаа хязгаарлалтыг заан өгөх хэрэгтэй болбол суурь классийн нэрийн араас түүнийг зааж болно.
Классийг хэрэглэх.
MixedPerson<string, int> person9 = new MixedPerson<string, int>("456", 356);
Person<string> person10 = new MixedPerson<string, int>("9867", 35678);
Console.WriteLine(person9.Id);
Console.WriteLine(person10.Id);
Хэрвээ суурь классийн түвшинд универсал параметрт хязгаарлалт тавигдсан бол параметрийг ашиглах үүсмэл класст тухайн хязгаарлалтыг тодорхойлсон байх ёстойг сануулъя.
class Person<T> where T : class
{
public T Id { get;}
public Person(T id) => Id = id;
}
class UniversalPerson<T> : Person<T> where T: class
{
public UniversalPerson(T id) : base(id) { }
}
Өөрөөр хэлбэл суурь класст class буюу дурын класс гэсэн хязгаарлалтыг заасан бол үүсмэл класст хязгаарлалтаар class эсхүл ямар нэгэн тодорхой классийг заах хэрэгтэй.
тэгшитгэлийн нэг язгуур нь эерэг, нөгөө язгуур нь сөрөг байх параметрийн бүх утгыг ол.
болох бөгөөд энэ тэнцэтгэл бишийг бодвол
үед манай тэнцэтгэл бишийн шийдийн нэг нь эерэг нөгөө нь сөрөг байна.
функц [1;9] завсарын аль хэсэгт буурах вэ?
функцийн хамгийн бага утгыг ол.