E 'lo stesso con Int32
, String
ecc L'operatore +
è definito implicitamente dal linguaggio.
è possibile controllare il codice sorgente di Delegate
, MulticastDelegate
, Int32
ecc Ci sono sovraccarichi di operator +
lì, è per questo che non appare nella documentazione di MSDN.
Dal linguaggio C# spec, sezione 7.8.4:
gli operatori di addizione predefiniti sono elencati di seguito.
(...)
• Delegate combinazione. Ogni tipo delegato fornisce implicitamente la seguente operatore predefinito, dove D è il tipo delegato:
D operator +(D x, D y);
C'è una differenza tra i tipi semplici e delegati.La specifica linguaggio C# non richiede che un delegato è implementato utilizzando System.Delegate
4.2.7 tipi delegato
Un delegato è una struttura dati che fa riferimento a uno o più metodi. Ad esempio, metodi si riferisce anche alle loro istanze oggetto corrispondenti. L'equivalente più vicino di un delegato in C o C++ è un puntatore a funzione, ma mentre un puntatore a funzione può solo fare riferimento a funzioni statiche, un delegato può fare riferimento sia ai metodi statici che a quelli di istanza. In quest'ultimo caso, il delegato memorizza non solo un riferimento al punto di ingresso del metodo, ma anche un riferimento all'istanza dell'oggetto su cui richiamare il metodo. I tipi di delegati sono descritti in §15.
Nota che non c'è menzione di System.Delegate
lì. Confrontalo con Sezione 4.1.4 Tipi semplici:
C# fornisce un set di tipi di struct predefiniti chiamati tipi semplici. I tipi semplici sono identificati tramite parole riservate, ma queste parole riservate sono semplicemente alias per tipi di struct predefiniti nello spazio dei nomi System, come descritto nella tabella seguente.
Reserved parola Aliased tipo
sbyte System.SByte
byte System.Byte
breve System.Int16
ushort System.UInt16
int System.Int32
uint System.UInt32
lungo System.Int64
ulong System.UInt64
char System.Char
galleggiante System.Single
doppia System.Double
bool System.Boolean
decimale tipo System.Decimal
o sezione 4.2.4 La stringa
(...)
La stringa di parole chiave è semplicemente un alias per la classe predefinita System.String.
Quindi la risoluzione dell'operatore + per i delegati su Delegate.Combine
è un dettaglio di implementazione dei compilatori C# in .NET framework.
Ho contrassegnato questo come un duplicato di [Perché non vedo l'operatore + = sovraccarico su System.Delegate?] (Http://stackoverflow.com/q/28391414/1364007) ma questa domanda ha (nel mio vista) risposte migliori. –