Jag är tvungen att dela in en klass i flera klasser. Jag har gjort följande: Jag är inne på lite okänt vatten så jag riskerar att kanske ställa en lite dum fråga. Jag undrar om man kan skicka med referens till en funktion istället för ett objekt och använda anrop från den nya klassen till basklassen? Titta på 1) Delegater och 2) Interface. Lite beroende på så är en utav dem möjliga. Delegater är i princip en typad pekare på en funktion, och Interface är i princip ett definerat gränssnitt, dvs. ett krav på en klass som implementerar gränssnittet, att ha de egenskaper och funktioner som finns definerade i interfacet.Flytta klassarv till fristående klasser. Få min applikation att fungera.
Så här såg det ut förrut:
Public class Form1: Form, KlassB, KlassC
{
}
Nu måste jag byta till
Public class Form1: Form
{
}
Public class NyKlass: KlassB, KlassC
{
}
För att kunna nå medlemmar i Form1 måste jag byta till public static i Form1 och anropa från NyKlass med hjälp av Form1.Medlem
Nu har jag en kontroll i Form1 som jag måste ha public static, men när jag ändrar något i designeeditorn så skriver den om till bara public.
Jag blir smått vansinning och jag vill bara få detta att fungera. Det var otroligt enkelt förrut när all kod hade fri tillgång till alla medlemmar. Hur ska jag göra nu?
Mvh
AndreasSv: Flytta klassarv till fristående klasser. Få min applikation att fungera.
Public class Form1: Form, KlassB, KlassC
{
}
Det gjorde den garanterat inte, för .NET har inte stöd för att ärva från många föräldrar.
Sen måste man ju säga att din design är något suboptimal så att säga, ska du ha en klass eller många?
Har du många så ska du ju inte använda som som om dom vore en enda stor blob.
<b>Det var otroligt enkelt förrut när all kod hade fri tillgång till alla medlemmar.</b>
Som du märkt, är det enkelt att skriva spagettikod...
För att detta inte ska bli enbart smutskastning så ska jag försöka komma med några råd också
- skulle ha varit enklare att hjälpa om du berättat mer om vad klasserna innehåller.
- accessera inte direkt medlemsvariabler utan använd properties, nånstans behöver du antagligen skicka med en referens så att klasserna vet om varandra.
- eventuellt kan du använda händelser (events) för att kommunicera mellan dom
- nej du behöver inte byta till static bara du har en referens till din instans
Sv:Flytta klassarv till fristående klasser. Få min applikation att fungera.
Jag har axWebBrowser1 i Form1 som jag vill synca i klassen som använder DWebBrowserEvents2 och HTMLDocumentEvents2.
Man kan göra lösningen på olika sätt men jag vill ändra så lite som möjligt för att undvika plötsliga buggar.
Går det att lösa detta utan att anropa massa funktioner så fort man skriver eller läser en variabel?
Hur skulle du göra rent konkret utan att ändra för mycket?Sv: Flytta klassarv till fristående klasser. Få min applikation att fungera.
Byggt en funktion för klassen som tar hand om webbrowser events som tilldelar 2 AxWebBrowser objekt genom att skicka referencen till objekten i Form1:
ieevents1.SetAxWebBrowser(ref axWebBrowser1,ref axWebBrowser2);
ieevents2.SetAxWebBrowser(ref axWebBrowser1,ref axWebBrowser2);
Det jag tror att den gör är att göra objekten till pekare så att hela webbrowserklassen får pekare istället för kopior. Stämmer det?
Här är en del av den kod jag använder för att knyta com connection point anrop till den webbrowserklassen.
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
/*axWebBrowser2.HandleDestroyed +=new System.EventHandler(axWebBrowser2_HandleDestroyed);*/
icpc = (UCOMIConnectionPointContainer)axWebBrowser1.GetOcx();
Guid guid = typeof (SHDocVw.DWebBrowserEvents2).GUID;
icpc.FindConnectionPoint(ref guid, out icp);
icp.Advise(ieevents1, out this.dwCookie );
icpc = (UCOMIConnectionPointContainer)axWebBrowser2.GetOcx();
guid = typeof (SHDocVw.DWebBrowserEvents2).GUID;
icpc.FindConnectionPoint(ref guid, out icp);
icp.Advise(ieevents2, out this.dwCookie );
ieevents1.SetAxWebBrowser(ref axWebBrowser1,ref axWebBrowser2);
ieevents2.SetAxWebBrowser(ref axWebBrowser1,ref axWebBrowser2);
//
// TODO: Add any constructor code after InitializeComponent call
//
}Sv:Flytta klassarv till fristående klasser. Få min applikation att fungera.
När jag försökte migrerar till separata klasser så löser sig det mesta med att tilldela objekt jag hämtat med ref . Däremot att göra en funktion i basklassen till static är att tigga om problem. Allt i den funktionen måste då också bli static och det innebär att alla funktionsanrop som görs i den måste bli static och det slutar med att allt måste bli static. Sv: Flytta klassarv till fristående klasser. Få min applikation att fungera.
Sv:Flytta klassarv till fristående klasser. Få min applikation att fungera.
Har löst det mesta nu i min applikation tack vare er hjälp.
Tackar tackar.