Hai techniczni,C#: Tworzenie Multicast delegata z typ boolean powrotnej
w C#, w jaki sposób możemy zdefiniować multicast delegata, który akceptuje obiekt DateTime i zwraca wartość logiczną.
Dzięki
Hai techniczni,C#: Tworzenie Multicast delegata z typ boolean powrotnej
w C#, w jaki sposób możemy zdefiniować multicast delegata, który akceptuje obiekt DateTime i zwraca wartość logiczną.
Dzięki
public delegate bool Foo(DateTime timestamp);
ten sposób zadeklarować delegat z podpisem opisujesz. Wszyscy delegaci są potencjalnie multiemisji, po prostu wymagają inicjalizacji. Takich jak:
public bool IsGreaterThanNow(DateTime timestamp)
{
return DateTime.Now < timestamp;
}
public bool IsLessThanNow(DateTime timestamp)
{
return DateTime.Now > timestamp;
}
Foo f1 = IsGreaterThanNow;
Foo f2 = IsLessThanNow;
Foo fAll = f1 + f2;
Wywołanie fAll
, w tym przypadku nazwałbym zarówno IsGreaterThanNow()
i IsLessThanNow()
.
To, czego nie da się, daje dostęp do każdej zwracanej wartości. Wszystko, co dostajesz, to ostatnia zwrócona wartość. Jeśli chcesz pobrać każdą wartość, będziesz musiał obsługiwać multiemisję ręcznie, tak jak:
List<bool> returnValues = new List<bool>();
foreach(Foo f in fAll.GetInvocationList())
{
returnValues.Add(f(timestamp));
}
class Test
{
public delegate bool Sample(DateTime dt);
static void Main()
{
Sample j = A;
j += B;
j(DateTime.Now);
}
static bool A(DateTime d)
{
Console.WriteLine(d);
return true;
}
static bool B(DateTime d)
{
Console.WriteLine(d);
return true;
}
}
Każdy delegat może być multicast delegat
delegate bool myDel(DateTime s);
myDel s = someFunc;
s += someOtherFunc;
Przydatny własnością delegata obiektów jest to, że mogą one być przypisane do jednego delegata wystąpienie do multiemisji przy użyciu operator +. Skomponowany delegat dzwoni do dwóch delegatów, z których składał się . Tylko uczestnicy tego samego typu mogą składać się z delegatów.
Edycja: delagate ma metodę GetInvocationList która zwraca listę załączonych metod.
Oto wzmianka o Delegate invocation
foreach(myDel d in s.GetInvocationList())
{
d();
}
Natknąłem się na ten sam problem. Szukałem i znalazłem to w msdn.
http://msdn.microsoft.com/en-us/library/2e08f6yc(v=VS.100).aspx
Istnieją dwie metody na delegatów
Link opisuje je szczegółowo, z próbkami kodu.
Możemy przechwycić te metody, aby obsłużyć wartości zwracane przez uczestników.
Co dzieje się z wartościami zwracanymi przez delegata złożonego podczas jego wywoływania? Czy istnieje jakaś tablica, która pozwala sprawdzić wartości zwracane po ich wywołaniu? Używałem już delegatów multiemisji, ale nigdy nie myślałem, że mają typ zwrotny. – AaronLS