namespace MitProject { public class MinKlasse : System.Windows.Forms.Form { public MinKlasse() {
} } } ----- MinKlasse.cs slut -----
Men det virker ikke - eller det vil sige applikationen virker fint, men designeren i VS kan slet ikke finde ud af det.
Jeg får denne fejl når jeg forsøger at se designet i VS: "The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file:
Form1 --- The base class 'MitProject.MinKlasse' could not be loaded. Ensure the assembly has been referenced or built if it is part of the project."
Eller også betragter den MinKlasse som en form og kan ikke finde ud af det med form1
Det skal lige sige at jeg bruger Compact Framwork, hvis det skulle gøre en forskel.
Men hvad gør jeg galt? Hvordan får jeg form1 til at arve fra System.Windows.Forms.Form og MinKlasse ?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Multibel arv er ikke understøttet i C# på den måde at du kan arve fra to forskellige klasser, som dem du viser, men det er jo heller ikke det du prøver at gøre (i hvert fald ikke i det kode du har lagt herud).
Det kode du har lagt her skulle der ikke være nogle problemer i - det skulle bygge fint, og designeren skulle også opføre sig fint nok. fejlen du har sendt indikerer at du ikke har bygget MinKlasse inden du prøvede at vise Form1 i designeren.
Jeg har lige forsøgt helt forfra, met et lille testproject:
1. New project 2. Visual C# Projects - Smart Device Application - MitProject 3. Windows CE - Windows Application 4. Width: 240 - height: 320 5. Add new class 6. MinKlasse.cs 7. ret public class MinKlasse til public class MinKlasse : System.Windows.Forms.Form 8. Gem MinKlasse 9. Ret public class Form1 : System.Windows.Forms.Form til public class Form1 : MinKlasse 10. Gem alt - kompiler, ingen kompilerfejl og det virker fint. 11. Luk VS 12. Åben VS igen og åben solution og får så følgende fejl:
" Object type cannot be converted to target type." " Error reading resources from the resource file for the default culture: Invalid ResX input. Could not find valid "resheader" tags for the ResX reader & writer type names."
og Formen har mistet sin bredde og højde, som jeg satte i punkt 4.
Sætter dem tilbage igen kompilerer og får en masse fejl, bla den jeg smed før.
Jeg forstår det ikke - kan du forklare mig hvad jeg gør galt?
Næh... det kan jeg ikke umiddelbart... jeg har lige prøvet at lave det samme her, med samme resultat.. fejl efter man åbner vs igen. jeg har ikke arbejdet så meget med den projekttype, og har aldrig lavet en baseform i sådan et projekt - jeg kan godt nok ikke forstå hvad der skulle være i vejen for at gøre det.
jeg kunne løse det ved at slette ressourcefilerne, og kommentere de ting ud kompileren fejlede på, og som vs tilsyneladende havde sat ind.
problemet synes ikke at optræde i andre projekttyper - mon der ligger en bug her et eller andet sted ?!?
Du har ret ingen fejl ved brug af eks. Windows Application, men det er nødvendigt med SmartDevice da den skal bruge Compact Framework.
Det ser ud til at de egenskaber der er til rådighed på form1 efter at have åbnet projektet igen er de almindelige egenskaber og ikke CompactFrameWork egenskaber.
Men selve projektet er stadig CompactFrameWork, derfor den fejler.
Men hvorfor faen skal den lave egenskaberne om til Almindeligt FrameWork ??
Ville være ret med en løsning, men som du siger syntes jeg det minder mere og mere om en bug.
Bare af ren nysgerrighed, er der nogen, der har et link til en forklaring af argumenterne for at udelade multipel arv i C# ? For hvis man spørger MS får man vel en forklaring noget i retning af "it's not a bug, it's a feature" ?
eller rettere... jeg tror bare at kompileren ikke giver dig lov med mindre den anden (de andre) klasse(r) er et interface :o) arne_v kan formegentlig fortælle dig meget mere om det hvis han kommer forbi her - han er rigtig skrap til sådan noget.
Det er meget sjældent at man har brug for multipel implementations arv (arve fra mere end en klasse som indeholder implementation - altså i C# sprog ikke er interface).
Multipel implementations arv kan godt bruges fornuftigt. Men det kan også bruges meget ufornuftigt.
Et kendt problem er "Diamond of Death". Vi har en klasse Parent. Vi har en klasse Child1 som arver fra Parent. Vi har en klasse Child2 som også arver fra Parent. det er helt fint. Så laver vi en klasse X som arver både fra Child1 og Child2. Og så har vi problemer.
Overvej f.eks. hvad følgende program skriver ud:
#include <iostream>
using namespace std;
class Number { private: int num; public: Number() { num=0; }; void SetNum(int n) { num = n; }; int GetNum() { return num; }; };
class IncrOneNumber : public Number { public: IncrOneNumber() : Number() { }; void IncrOne() { SetNum(GetNum()+1); }; void print() { cout << GetNum() << endl; }; };
class IncrFiveNumber : public Number { public: IncrFiveNumber() : Number() { }; void IncrFive() { SetNum(GetNum()+5); }; void write() { cout << GetNum() << endl; }; };
class IncrOneAndFiveNumber : public IncrOneNumber, public IncrFiveNumber { public: IncrOneAndFiveNumber() : IncrOneNumber(), IncrFiveNumber() { }; };
Det har du het ret i. Det var driis som bragte det på bane (22/08-2004 14:19:52).
Relationen til dit spørgsmål er vel at hvis multipel implementations arv var muligt så kunne du snyde den designer ved at arve fra både class2 og Form.
Det er korrekt :) Havde faktisk ikke lige tænkt på driis s spørgsmål. Men det er dejligt med en forklaring.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.