Принципы объектно-ориентированного программирования

         

Определение делегатов в качестве статических членов



Определение делегатов в качестве статических членов

Довольно неуклюжее решение создавать экземпляр делегата при каждом его применении, но в С# можно определять метод, который используется при создании делегата как статический член класса. Ниже приведен предыдущий пример с применением такого подхода. Заметьте, что теперь делегат определен как статический член класса myCallback и этот член может использоваться в методе Main, так что клиенту нет нужды создавать экземпляр делегата.

using System;

class DBConnection {


public DBConnection(string name)

<

this.name = name;

>

protected string Name; public string name {

get {

return this.Name; >

set {

this.Name = value; } } >

class DBManager {

static DBConnection[] activeConnections;

public void AddConnectionsO

{

activeConnections = new DBConnection[5];

for (int i = 0; i < 5; i++)

{

activeConnections[i] = new DBConnection("DBConnection " + (i + 1))-} }

public delegate void EnumConnectionsCallback(DBConnection connection);

public static void EnumConnections(EnumConnectionsCallback

callback) {

foreach (DBConnection connection in activeConnections)

callback(connection); } } }

class Delegate2App {

public static DBManager.EnumConnectionsCallback myCallback = new DBManager.EnumConnectionsCallback (ActiveConnectionsCallback);

public static void ActiveConnectionsCallback(DBConnection

connection) {

Console.WriteLine ("Callback method called for " +

connection.name); }

public static void MainQ {

DBManager dbMgr = new DBManagerQ;

dbMgr. AddConnectionsO;

DBManager. EnurnConnections(myCallback); } >



Содержание раздела