Hejsan Hej. <code> delegates och events är att räkna som klasser. Det medför att om de är innanför klass deklarationen är de nästlade klasser. Kanonsvar !!Ärva EventHandlers?
Har en basklass där jag skapar lite events och har därför mina evenhandlers i denna klass. Men då jag sedan ärver från från denna så finns inte eventhandlerna i denna klassen utan jag får skriva
<code>
basklass.MyEventHandler += ...
</code>
går det inte att få så att man ärver vidare dessa. Eftersom nästan alla mina klasser ärver från denna basklass så kommer den funktionen som hanterar händelsen att få ta emot alla händelser från alla klasser som ärver från denna basklass.
Om det inte går så skulle det vara intressant att veta varför detta inte fungerar..
/wSv: Ärva EventHandlers?
Hur deklarerar du dina delegater/eventhandels??
Testa "protected".
//freddaSv: Ärva EventHandlers?
public delegate void EventHandler(object sender, EventArgs e);
</code>
Men om jag deklarerar dem protected så kommer jag bara åt dem från den klassen som ärver basklassen.. Sv: Ärva EventHandlers?
Lite exempel kod:
<code>
class App
{
static void Main(string[] args)
{
dog d = new dog();
mammal m = new mammal();
d.EatEvent += new mammal.eatHandler(OnEat);
m.EatEvent += new mammal.eatHandler(OnEat);
d.Eat();
m.Eat();
}
static void OnEat(object sender, EventArgs e)
{
Console.WriteLine("A {0} is eating..", sender.ToString());
}
}
public class mammal
{
public delegate void eatHandler(object sender, EventArgs e);
public event eatHandler EatEvent;
public void Eat()
{
EatEvent(this, null);
}
public override string ToString()
{
return "mammal";
}
}
public class dog: mammal
{
public override string ToString()
{
return "dog";
}
}
</code>
För att komma åt event handlern utan en referens till klassen som "äger" den, måste du därför lägga den globalt i namespacet:
<code>
public delegate void eatHandler(object sender, EventArgs e);
public class mammal
{
public event eatHandler EatEvent;
</code>
Nu kan du skriva följande:
<code>
d.EatEvent += new eatHandler(OnEat);
m.EatEvent += new eatHandler(OnEat);
</code>
Självklart förutsatt att du är i samma namespace som klassen eller har deklarerat ett using direktivSv: Ärva EventHandlers?
Tusen tack.. Både en lösning och beskrivning..
Tackar igen
/w