c#从委托函数访问所有者对象

时间:2016-02-04 16:48:09

标签: c# delegates

我可以从该委托中访问包含委托的对象吗?

e.g。

class Salutation {

     public string OtherParty {get; set;}
     public AddressDelegate GreetingDelegate {get; set;}

}

public delegate void AddressDelegate ();

则...

void Main() {
    Salutation hello = new Salutation { 
        OtherParty = "World",
        GreetingDelegate = new AddressDelegate(HelloSayer)
    };

    hello.GreetingDelegate();
}

private void HelloSayer() {
    Console.WriteLine(string.Format("Hello, {0}!", OtherParty));  
}

那么可以从OtherParty函数中引用Salutation类中的HelloSayer属性,还是需要将数据作为参数传递给函数?

2 个答案:

答案 0 :(得分:2)

你需要通过它。代表对所有者对象一无所知。因为它不是所有者,所以它只是一个恰好引用此委托的对象。

答案 1 :(得分:1)

    static void Main(string[] args)
    {
        Salutation hello = new Salutation();
        hello.OtherParty = "World";
        hello.GreetingDelegate = new AddressDelegate(HelloSayer);

        hello.GreetingDelegate(hello.OtherParty);
        Console.ReadKey();
    }

    public delegate void AddressDelegate(string otherParty);

    private static void HelloSayer(string otherParty)
    {
        Console.WriteLine(string.Format("Hello, {0}!", otherParty));
    }

安德烈说你需要传递它,这是一个例子。