Att använda sig utav delegates i en enda class är inga problem, det är när jag ska använda flera olika klasser jag stöter på enorma problem. Byt ut 'dc' till 'DelegateClass' på rad 9 och ange de statiska metoderna som public så borde det funka. Sådär, lyckades fixa problemet.. va lite andra småfel med. när du skapar en delegate på det sättet så skapar du egentligen en nästlad klass, inte en medlem. så din kod expanderar till: Nu hänger jag inte med riktigt. är på semester, men här kan du läsa lite till: Delegate problem.
Syftet med programmet är att jag genom MainClass ska kunna välja vilket funktion som utförs i DelegateClass.
Jag använder följande kod:
using System;
class MainClass
{
static void Main()
{
DelegateClass dc = new DelegateClass();
dc.MyDelegate dcFunction = new dc.MyDelegate(dc.F);
dc.Print(dcFunction);
}
}
public class DelegateClass
{
public delegate void MyDelegate();
public void Print(MyDelegate DFunction)
{
DFunction();
}
static void F()
{
Console.WriteLine("Funktion F");
}
static void G()
{
Console.WriteLine("Funktion G");
}
}
När jag kompilerar det med csc får jag följande felmedelanden:
Hello.cs(9,3): error CS0246: The type or namespace name 'dc' could not be found
(are you missing a using directive or an assembly reference?)
Hello.cs(9,34): error CS0246: The type or namespace name 'dc' could not be found
(are you missing a using directive or an assembly reference?)
Hello.cs(9,51): error CS0122: 'DelegateClass.F()' is inaccessible due to its
protection level
Hello.cs(25,14): (Location of symbol related to previous error)
Hello.cs(10,3): error CS1502: The best overloaded method match for
'DelegateClass.Print(DelegateClass.MyDelegate)' has some invalid
arguments
Hello.cs(10,12): error CS1503: Argument '1': cannot convert from 'dc.MyDelegate'
to 'DelegateClass.MyDelegate'
Jag hoppas verkligen någon kan hjälpa mig med problemet. det är säkert något väldigt enkelt feltänk men jag är ny med C# och har väl inte riktigt kommit in i tänket än :)
Det jag är fundersam över är varför den inte hittar "dc", men men.. nått snille här hjälper mig nog ;)
Mvh Andreas
Sv: Delegate problem.
Sv:Delegate problem.
Men det verkar som om man skapar delegater som hör hemma i en annan klass som följande:
<code c#>
DelegateClass.MyDelegate dcFunction = new DelegateClass.MyDelegate(dc.F);
<code>
Hur fungerar detta? Blir MyDelegate i DelegateClass statisk automatisk?
Mvh AndreasSv: Delegate problem.
public class DelegateClass {
public class MyDelegate : MulticastDelegate { ... }
}
Sv:Delegate problem.
Det jag är fundersam över är varför jag kan använda MyDelegate precis som om den vore en statisk medlem av klassen. När jag provade att göra den statisk så klagade kompilatorn, troligtvis av den anledningen du försöker förklara för mig.
Om du kunde förklara det närmare vore jag väldigt tacksam, om inte att hänvisa mig till någon sida jag kan läsa mer i ämnet för så har jag aldrig hört någon förklara det innan. Att det blir en nästlad klass..
Finns det någon möjlighet göra något liknande i DelegateClass:
<code c#>
MyDelegate aDelegate = new MyDelegate();
<code>
för att sedan komma åt den i MainClass på följande sätt efter att ha skapat ett objekt vid namn dc:
<code c#>
dc.aDelegate += new DelegateClass(dc.G);
<code>
jag inser att namnen kunde varit tydligare, men njae.. man kommer väl i det antar jag.
sedan har jag lite svårt att förstå skillnaden i att göra
MyDelegate nånting = new MyDelegate
och
public event MyDelegate MyEvent
för båda håller väl funktioner inuti sig?
kan de bara användas på egna ställen eller hur ligger det till?
jag inser att jag kanske ställer många frustrerande frågor, men jag vill verkligen lära mig det här och jag har inte hittat någon bra bok på ämnet.
Tacksam för alla svar jag kan få!
Mvh Andreas
Mvh AndreasSv: Delegate problem.
http://www.yoda.arachsys.com/csharp/faq/#event.delegate och här http://msdn.microsoft.com/msdnmag/issues/01/04/net/