 |
 |
|
Delegados em C#. Rede:
|
|
Se nós olharmos C++ há uma característica chamada função da rechamada. Esta característica usa ponteiros às funções passá-las como parâmetros a outras funções. O delegado é uma característica similar mas é mais tipo cofre, que está porque um contraste stark com os ponteiros da função de C++. Um delegado pode prender reference/s a um mais mais funções e invocá-lo concoante que needed.
|
|
Um delegado necessita seus parâmetros do método o nome e (variáveis da entrada e de saída) quando nós criamos um delegado. Mas o delegado não é uma construção autônoma. é uma classe. Todo o delegado está herdado da classe baixa do delegado da biblioteca da classe de .NET quando se declara. Isto pode ser de das duas classes de System.Delegate ou de sistema. MulticastDelegate.
|
|
Se o delegado contiver um tipo do retorno de vácuo, então é aliased automaticamente ao tipo de System.MulticastDelegate. Isto pode suportar funções múltiplas com um operador de +=. Se o delegado contiver um tipo do retorno non-vago então é aliased ao sistema. A classe e do delegado não podem suportar métodos múltiplos.
|
|
Deixar-nos ter um olhar no seguinte código da amostra.
|
class Figure
{
public Figure(float a, float b, float c)
{
m_xPos = a;
m_yPos = b;
m_zPos = c;
}
public void InvertX()
{
m_xPos = - m_xPos;
}
public void InvertY()
{
m_yPos = - m_yPos;
}
public void InvertZ()
{
m_zPos = - m_zPos;
}
private float m_xPos = 0;
private float m_yPos = 0;
private float m_zPos = 0;
}
|
|
|
Agora, nós temos uma classe nomeada Figura e tem três campos confidenciais que se usam armazenar a posição e os três métodos para inverter esta posição por cada linha central. Na classe principal nós declaramos o delegado como segue:
|
|
public delegate void FigureDelegate();
|
|
|
E agora na função principal nós devemos usá-la gostamos disto:
|
Figure figure = new Figure(10,20,30);
FigureDelegate fx = new FigureDelegate(figure.InvertX);
FigureDelegate fy = new FigureDelegate(figure.InvertY);
FigureDelegate fz = new FigureDelegate(figure.InvertZ);
MulticastDelegate f_del = fx+fy+fz;
|
|
|
Neste exemplo nós criamos três delegados do tipo de FigureDelegate e unimos a estes elementos nossos três métodos da figura classe. Agora cada delegado mantem o endereço da função unida. A última linha do código é muito interessante, aqui nós criamos um delegado do tipo baixo (MulticastDelegate) e unimos três de nossos delegados já criados. Enquanto todos nossos métodos são do tipo do retorno do vácuo são automaticamente do tipo MutlticastDelegate e um MulticastDelegate pode suportar o invocation múltiplo dos métodos também. Daqui nós podemos escrever
|
Figure figure = new Figure(10,20,30);
FigureDelegate fMulti = new FigureDelegate(figure.InvertX);
fMulti += new FigureDelegate(figure.InvertY);
fMulti();
|
|
 |
 |
Keywords Delegates in C# .Net, c# c++, c# dotnet, c# type, c# datagrid, c# object, delegates vb,
c# value, visual c#, c# method, c# control, c# example, vb c#, system c#, c# application,
c# sample, c# project, c# form, convert c#, csharp c#, custom c#, add c#, c# create
|