Лекция 15. Обобщения Пример Обобщенный класс


Пример 5. Ограничение обобщенного метода



бет3/4
Дата19.01.2023
өлшемі25.18 Kb.
#417427
түріЛекция
1   2   3   4
Байланысты:
Лекция 15. мысалдар
анатомия РК, Лекция 2 (2)
Пример 5. Ограничение обобщенного метода
using System;
using System.Collections.Generic;
interface ITrue
{
bool isTrue();
}
class Person : ITrue
{
public string name;
public int age;
public bool isTrue()
{
return age >= 18;
}

}
static class Extension


{
public static List filtr(this List TList) where T : ITrue
{
List newTList = new List();
foreach (T tobj in TList)
if (tobj.isTrue()) newTList.Add(tobj);
return newTList;
}
}
class Program
{
static void Main()
{
List
TList = new List
{ new Person {name = "T1", age = 15}, new Person {name = "T2", age = 18},
new Person {name = "T3", age = 20}, new Person {name = "T4", age = 13} };
List
T2List = TList.filtr();
foreach (Person t in T2List)
{ Console.WriteLine(t.name + " " + t.age); }
}
}

Пример 6. Простой пример обобщенного делегата.

using System;


// Объявить обобщенный делегат.
delegate T SomeOp(T v);
class GenDelegateDemo
{
// Возвратить результат суммирования аргумента.
static int Sum(int v)
{
int result = 0;
for (int i = v; i > 0; i--)
result += i;
return result;
}
// Возвратить строку, содержащую обратное значение аргумента.
static string Reflect(string str)
{
string result = "";
foreach (char ch in str)
result = ch + result;
return result;
}
static void Main()
{
// Сконструировать делегат типа int.
SomeOp intDel = Sum;
Console.WriteLine(intDel(3));
// Сконструировать делегат типа string.
SomeOp strDel = Reflect;
Console.WriteLine(strDel("Привет"));
}
}

Пример 7. Продемонстрировать применение обобщенного интерфейса.

using System;


public interface ISeries
{
T GetNext();// возвратить следующее по порядку число
void Reset(); // генерировать ряд последовательных чисел с самого начала
void SetStart(T v); // задать начальное значение
}
// Реализовать интерфейс ISeries.
class ByTwos : ISeries
{
T start;
T val;
// Этот делегат определяет форму метода, вызываемого для генерирования
// очередного элемента в ряду последовательных значений.
public delegate T IncByTwo(T v);
// Этой ссылке на делегат будет присвоен метод,
// передаваемый конструктору класса ByTwos.
IncByTwo incr;
public ByTwos(IncByTwo incrMeth)
{
start = default(T);
val = default(T);
incr = incrMeth;
}
public T GetNext()
{
val = incr(val);
return val;
}
public void Reset()
{
val = start;
}
public void SetStart(T v)
{
start = v;
val = start;
}
}
class ThreeD
{
public int x, y, z;
public ThreeD(int a, int b, int c)
{
x = a;
y = b;
z = c;
}
}
class GenlntfDemo
{
// Определить метод увеличения на два каждого
// последующего значения типа int.
static int IntPlusTwo(int v)
{
return v + 2;
}
// Определить метод увеличения на два каждого
// последующего значения типа double.
static double DoublePlusTwo(double v)
{
return v + 2.0;
}
// Определить метод увеличения на два каждого
// последующего значения координат объекта типа ThreeD.
static ThreeD ThreeDPlusTwo(ThreeD v)
{
if (v == null) return new ThreeD(0, 0, 0);
else return new ThreeD(v.x + 2, v.y + 2, v.z + 2);
}
static void Main()
{
// Продемонстрировать генерирование
// последовательного ряда значений типа int.
ByTwos intBT = new ByTwos(IntPlusTwo);
for (int i = 0; i < 5; i++)
Console.Write(intBT.GetNext() + " ");
Console.WriteLine();
// Продемонстрировать генерирование
// последовательного ряда значений типа double.
ByTwos dblBT =
new ByTwos(DoublePlusTwo);
dblBT.SetStart(11.4);
for (int i = 0; i < 5; i++)
Console.Write(dblBT.GetNext() + " ");
Console.WriteLine();
// Продемонстрировать генерирование последовательного ряда
// значений координат объекта типа ThreeD.
ByTwos ThrDBT = new ByTwos(ThreeDPlusTwo);
ThreeD coord;
for (int i = 0; i < 5; i++)
{
coord = ThrDBT.GetNext();
Console.Write(coord.x + "," +
coord.y + "," +
coord.z + " ");
}
Console.WriteLine();
}
}



Достарыңызбен бөлісу:
1   2   3   4




©melimde.com 2023
әкімшілігінің қараңыз

    Басты бет
Сабақтың тақырыбы
бойынша жиынтық
жиынтық бағалау
Сабақ тақырыбы
бағдарламасына сәйкес
Сабақтың мақсаты
тоқсан бойынша
сәйкес оқыту
ғылым министрлігі
бағалауға арналған
Реферат тақырыбы
Сабақ жоспары
оқыту мақсаттары
жиынтық бағалауға
арналған тапсырмалар
білім беретін
бағалау тапсырмалары
Қазақстан тарихы
Қазақстан республикасы
мерзімді жоспар
жиынтық бағалаудың
тоқсанға арналған
жалпы білім
нтізбелік тақырыптық
республикасы білім
бекіту туралы
Зертханалық жұмыс
Жалпы ережелер
арналған жиынтық
болып табылады
Қазақстан республикасының
арналған әдістемелік
Мектепке дейінгі
Қысқа мерзімді
оқыту әдістемесі
Қазақ әдебиеті
рсетілетін қызмет
Инклюзивті білім
білім берудің
тақырыптық жоспар
бағалаудың тапсырмалары
атындағы жалпы
пайда болуы
пәнінен тоқсанға
туралы жалпы
әдістемелік ұсыныстар
коммуналдық мемлекеттік
қарым қатынас
қызмет стандарты
мемлекеттік мекемесі
Жұмыс бағдарламасы