Программирование >>  Программирование с использованием ajax 

1 ... 112 113 114 [ 115 ] 116 117 118 ... 396


364 Часть I. Язык С#

Таблица 12.5. Доступные ограничения

Ограничение

Определение

Пример использования

struct

Тип должен обязательно представлять собой тип-значение

В классе, которому для работы требуются типы-значения, например, в классе, где значение 0 у переменной экземпляра типа т имеет некий смысл

class

Тип должен обязательно представлять собой ссылочный тип

В классе, которому для работы требуются ссылочные типы, например в классе, где значение null у переменной типа т имеет некий смысл

base-class

Тип должен обязательно либо представлять собой, либо наследоваться от base-class. В таком ограничении разрешается предоставлять любое имя класса

В классе, которому для работы требуются определенные базовые функциональные возможности, унаследованные от base-class

interface

Тип должен обязательно либо представлять собой, либо реализовать

interface

В классе, которому для работы требуются определенные базовые функциональные возможности, обеспечиваемые interface

new 0

Тип должен обладать общедоступным конструктором без всяких параметров

В классе, где необходимо иметь возможность создавать переменные экземпляра типа т, к примеру, в конструкторе

Циклические ограничения типов, вроде тех, что показаны ниже, запрещены:

class MyGenericClass<Tl, Т2> where Т2 : Tl where Tl : Т2

Этот код компилироваться не будет. В следующем практическом занятии демонстрируется пример определения и работы обобщенного класса с использованием семейства классов Animal, которые показывались в предыдущих главах.

Определение обобщенного класса

1. Создайте новое консольное приложение по имени Chl2Ex04 и сохраните его в каталоге С:\BegVCSharp\Chapterl2.

2. Щелкните правой кнопкой мыши на имени этого проекта в окне Solution Explorer и выберите в контекстном меню, которое появится после этого, пункт AddAdd Existing Item (Добавить=>Добавить существующий элемент).

3. Выберите файлы Animal, cs, Cow.cs, Chicken, cs, SuperCow.cs и Farm.cs из каталога С: \BegVCSharp\Chapterl2\Chl2Ex02\Chl2Ex02 и щелкните на кнопке Add (Добавить).

4. Измените объявление пространства имен в каждом из добавленных файлов следующим образом:

namespace Chl2Ex04



5. Измените код в файле Animal. cs, как показано ниже:

public abstract class Animal {

public abstract void MakeANoise () ;

6. Измените код в файле Chicken, cs следующим образом:

public class Chicken : Animal {

public override void MakeANoise () {

Console.WriteLine( {0} says cluck! , name);

7. Измените код в файле Cow. cs следующим образом:

public class Cow : Animal {

public override void MakeANoise () {

Console .WriteLine ( {0) says moo! , name) ;

8. Добавьте новый класс с именем SuperCow и измените код в файле SuperCow.cs следующим образом:

public class SuperCow : Cow {

public void Fly 0 {

Console.WriteLine ( {0} is flying! , name);

public SuperCow(string newName) : base(newName)

public override void MakeANoise () {

Console.WriteLine ( {0} says here I come to save the day! , name);

9. Добавьте новый класс с именем Farm и измените код в файле Farm, cs, как показано ниже:

using System;

using System. Collections;

using System.Collections.Generic; using System.Linq; using System.Text;



namespace Chl2Ex04 {

pviblic class Farm<T> : 1ЕпгжвгаЫе<Т> where T : Animal

private List<T> animals = new List<T>() ;

pviblic List<T> Animals

get {

return animals;

public IEnumerator<T> GetEnumerator () {

return animals. GetEmmerator () ;

lEnumerator lEnumerable.GetEnumerator() {

return animals. GetEnumerator () ;

public void MakeNoises () {

foreach (T animal in animals) {

animal.MakeANoise(); }

public void FeedTheAnimals () {

foreach (T animal in animals) {

animal.FeedO ;

public Farm<Cow> GetCows () {

Farm<Cow> cowFarm = new Farm<Cow> () ;

foreach (T animal in animals)

if (animal is Cow) {

cowFarm.Animals .Add (animal as Cow) ;

return cowFarm;

10. Измените код в файле Program, cs следующим образом:

static void Main(string[] args)

Farm<Animal> farm = new Farm<Animal>(); farm.Animals.Add(new Cow( Jack )); farm.Animals.Add(new Chicken( Vera )); farm.Animals.Add(new Chicken( Sally )); farm.Animals.Add(new SuperCow( Kevin ));



1 ... 112 113 114 [ 115 ] 116 117 118 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика