Hallo an alle.
Also ich finde schon, das das new Schlüsselwort durchaus seine daseins Berechtigung hat.
Man nehme einer Abstrakte Klasse die Abstrakte InputDaten hat
public abstract class AbstractIrgendwas
{
public virtual AbstractIrgendwasInputData InputData {get; set;}
public abstract void MachWas()
}
public abstract class AbstractIrgendwasInputData
{
}
Dann haben wir noch eine ableitung davon
public class DefaultIrgendwas : AbstractIrgendwas
{
public override void MachWas()
{
Console.WriteLine( ((DefaultIrgendwasInputData) InputData).DefaultValue ) // Dieser Cast müsste hier immer wieder passieren -> unschön, da ich ja hier weiß das es sich um defaultInputDaten handeln muss.
}
}
public class DefaultIrgendwasInputData : AbstractIrgendwasInputData
{
public int DefaultValue {get; set;}
}
Das gute am new Schlüsselwort ist ja, das man einen anderen Rückgabe Typen zurückgeben kann.
public class DefaultIrgendwas : AbstractIrgendwas
{
public new DefaultIrgendwasInputData InputData {get {return (DefaultIrgendwasInputData )base.InputData;}}
public override void MachWas()
{
Console.WriteLine( InputData.DefaultValue ) // besser!!
}
}
ganz klar, man kann sich darüber streiten.. aber manchmal erleichtert es einem die Arbeit.
Grüße
Hi Gogonfa
hmm leider kann man T nicht so einschränken wie Du es brauchst..
schön wäre wenn so etwas funktionieren könnte: where T: operator+
Ich nehme an T als abstrakte Klasse zu definieren Fällt aus? Wahrscheinlich willst du da eher nen Int oder Double reinschieben.. richtig?
Sicher geht das.
Du muss nur eine andere "Liste" erzeugen.
wenn du mit einem Identifier oder Key arbeiten möchtest ist Dictionary deine Klasse.
Da das aber eher Grundlagenwissen ist, verzichte ich hier auf ein Code Beispiel und verweise auf die msdn.
Da habt ihr natürlich völlig recht.
Da er in der Methode aber 2 Zufallszahlen erzeugt, denke ich, das er auch genau 2 pro user eingabe braucht. Wenn er die Methode natürlich in einer ms mehrere male aufruft bekommt er die selben Zahlen.. ganz klar.
Hi JAck30lena,
das ist so nicht richtig.. er erzeugt das Random Object mit dem parameterlosen Konstruktor.
Zitat Msdn:
Initialisiert eine neue Instanz der Random-Klasse unter Verwendung eines zeitabhängigen Standardstartwerts.
Wenn er new Random(0) geschrieben hätte, hättest Du natürlich recht.
Gruß
Jan
Du hast eigentlich nur begrenzte Möglichkeiten das Ende festzustellen. Zwei davon hat jaensen jetzt genannt. Eine dritte ist auf eine feste Länge zu warten(hab ich selbst schonmal programmiert) Allerdings ist dann zu empfehlen einen Timeout zu implementieren.
Gruß
Hmm, sehr interressant.. warum fangt ihr die Exception nicht, und beendet das Programm sauber? Naja ihr werdet schon wissen was ihr tut.
Dann musst Du raufinden was an dem einem % anders ist.
Lass dir die gesamte Exception inclusive Stacktrace in das log ausgeben.
Ihr solltet euch mal gedanken um ein ausführliches Exception Handling machen. Denn wenn dieser angesprochnene Dialog kommt, ist das imho ein Programmierfehler. Eine stabile Anwendung darf sich nie so beenden (zumindest nicht nach einem erfolgreichen start). Es sollte immer noch ein eigener Fehlerdialog kommen, und das ganze weggeloggt werden.
Keine Ahnung.. aber mich würd generell interessieren warum man das wohl machen will??
Hallo,
also soweit ich weiß geht Linq unter .Net 2.0 nur mit einigen Tricks und dann auch nur wenn VS2008 läuft. Linq2Sql läuft unter 2.0 garnicht.
Hallo,
also generell solltest du, wenn du ein Event feuerst vorher auf null prüfen.
if (CSHARPEvent != null)
CSHARPEvent();
was ich denke was dein eigentliches Problem ist: bei show wird das Fenster geöffnet aber er bleibt nicht in deiner Prozedur er geht mit return raus. Da aber deine Variabeln alle Local deklariert sind, sind sie somit ungültig. Also wird dein Event wieder abgehängt und ist null.
du könntest alle deine Vergleichswerte in eine Liste oder ein Array packen und Contains aufrufen.
@Trib
da man aus dem Int kein TimeSpan machen kann.
das ist so nicht richtig. TimeSpan hat eine Menge an statischen Methoden. Wenn dein int Tage enthält kannst du z.B. so was schreiben:
TimeSpan x = TimeSpan.FromDays(i);
Gruß
Annahme:
Du serialisierst mit einem Programm und Deserialisierst mit einem Anderen, und hast LCA.XML.SMF.DoSMFFile 2x implementiert?
edit: hiermit ziehe ich diesen Beitrag zurück 🙂 hab die erste Zeile überlesen.
Also, wie schon gesagt kannst die Reihenfolge nicht ändern.
Aber beschreib doch mal den Hintergrund.. Was du damit machen möchtest und warum es genau in dieser Reihenfolge passieren muss.
Hallo Roxx,
ich habe zwar keine Ahnung was bei dir da falsch läuft, aber in der Praxis hat sich herausgestellt das Lösungen mit einer Managed C++ Wrapper dll sich meist stabiler und einfacher gestallten. Einfach weil C++ besser mit den c Typen umgehen kann.
Ist vllt. nicht immer der Fall, aber ich bin so immer besser gefahren.
Ich glaub ihr habt den Mann grundsätzlich falsch verstanden.. oder ich hab ihn falsch verstanden 🙂
ich glaube bezogen auf den vorigen Post möchte er, das Bar() aus Foo3 nicht mehr aufzurufen ist.
Das funktioniert übrigens nicht, es sei den die Ableitung ist in einer anderen dll.
Dann kann man die Funktion als internal definieren.
edit2:
Ich hab mir das ganze nochmal durchgelesen.. möchtest du die Funktion überhaupt von aussen aufrufen können? dann ist private dein Schlüsselwort.
Hallo Nergal,
das ist eine Sicherheitsfunktion der Serialisierung, damit kein murks beim Deserialisieren passiert. Die Standartvorgehensweise ist hier die zu Serialisierende Klasse in eine eigene dll zu packen und von beiden Programmen auf diese zu referenzieren.
Das hat auch den Vorteil das du die Klasse nur einmal pflegen musst und nicht immer ganz genau drauf achten musst, immer beide Klassen zu ändern.
Hallo zommi,
du hast hier einen kleinen Aspekt übersehen.
AbstractOrganizationalUnit ist wie der Name schon sagt abstract. Du kannst also keine Instanz davon erzeugen. Sonst würde die gesamte sache mit dem <T> ja schon von Haus aus Sinnlos sein.
Gruß
edit: Um eventuell noch flexibler (nicht schöner) eine Create Methode zu bauen (falls die subklassen jeweils andere Daten brauchen) könntest du sowas machen:
public Abstract class AbstractFupp
{
public abstract void Create (params object[] parameter);
}
public class SubFupp : AbstractFupp
{
public override void Create(params object[] parameter)
{
mach was mit den params
}
}
Da wirst du das Umfeld noch ein wenig genauer erklären müssen..
liegt Assembly2 vielleicht nicht neben Assembly1 oder in den Standart suchpfaden?
hat Assembly2 vielleicht seinerseits referenzen zu anderen Assemblys?
Gibts vielleicht eine InnerException die das ganze Aufklärt?
Gruß
Hallo,
oder eine Abhängigkeit davon wurde nicht gefunden
versuch mal den DependencyWalker -> Google anzuwerfen, und schau welche Dll´s er eventuell nicht finden kann.
Gruß
Ja. Wenn du die declaration (Objekt myObjekt = new Objekt(); ) in die Schleife verschiebst passt es.
Du solltest aber überlegen ob du nicht direkt in die Objecte mappen möchtest Stichwort: O/R Mapper. Erst in ein Dataset zu füllen und dann daraus Objecte erstellen ist recht unperformant und nicht sehr speichersparend.
Eventuell sind Typisierte Datasets was für dich.. hängt aber vom Anwendungsfall ab.
Bist du sicher das der ObjektSuchbegriff den du deiner Combobox addest immer ein verschiedenen Wert hat? Da könnt der Hund begraben sein.
Danke für die Antworten,
ich werd mir alles mal anschauen 🙂 und mich dann wieder melden
Hallo Blackcoin, danke für die Antwort.
Ok, ich hab verstanden das diese Gadgets sehr wenig mit Forms.. also eigentlich gar nichts zu tun haben.
Es sind also html seiten.. bekomme ich hieraus irgendwie c# dlls aufgerufen? Vllt. über Com Objecte etc? Ich denke daran so eine Art GetPicture() funktion einzubauen und dieses Bild dann im Html anzuzeigen. Ist das möglich?
Wie sind denn Gagets wie zum Beispiel diese CPU / Memory Anzeige aufgebaut?
Ich wollte unter c# ein Vista Gadget programmieren. Könnt ihr mir gute tutorials in diese richtung empfehlen?
Hallo,
Ich hab mal ne Frage zu c++ dlls,
Kann man irgendwie programmatisch in C#(oder Commandozeile) abprüfen ob eine c++ dll im debug gebaut wurde?
Ich Danke für jeden anstoss.
Um alternativen aufzuzeigen müssten wir glaub ich mehr Infos zu deinem Problem haben..
Schon überlegt in der Klasse in der der Bw läuft einfach nen bool flag anzulegen?
if(_shouldSleep)
Thread.Sleep(10);
Zu deinen Edits :
1: Nein ich denke nicht das 32K Bytes Array zu einer OutofMemory Exception füren da du davon ja nur einen anlegst und diesen immer wieder befüllst. Wir reden hier ja vom MB
2 : Ich denke da suchst du am falschen Platz.
du hast deine Daten jetzt auch 2-3 mal im Speicher...
Ich weis jetzt nicht von welchem Typ stream ist.. aber die meisten haben funktionen wie readToEnd damit sparst dir schonmal 70MB für den Memory Stream.
Wenn das nicht funktionier würde ich mir an deiner Stelle mal das yield statement anschauen
Du nimmst als rückgabewert IEnumerable<byte> und liest deinen Stream byte für byte aus. und gibst jedes Byte mit yield return byteVariable zurück. <- meiner meinung nach das speichersparenste konzept. Aber ich weis nicht wie es mit der Performance aussieht.
Du musst versuchen in deinen Klassen USerControl und Form die selbe Instanz zu benutzen.
Das geht über viellerlei Möglichkeiten.. von der Form die SuperCom Instanz des UserControls setzen oder andersrum, statische Variblen, Singleton etc.
Dein Problem ist das du in deiner Form und in deinem UserControl jeweils eine neune Instanz von SuperCom erstellst. Deswegen kommt das Event niemals in deinem UserControl an.
Du löst das Event von Instanz 1 aus, hast aber das Event von Instanz 2 abonniert.
Oder um es zu vervollständigen mit dependencyWalker (depends.exe) Ich schätze es liegt wirklich an einer nicht gefundenen dll.
Hast du vielleicht die beiden dlls nicht neben die anwendung oder in einen der searchpaths (system32) etc. kopiert? Oder vielleicht gegen das 3.x Framework kompiliert und auf xp nur das 2.0 drauf?
Gibt echt viele möglichkeiten. Lass mal depends laufen und berichte von seiner ausgabe.
Also falls du hier nochmal liest, denke ich das herbivore mit dem Design auf ein client / server basiertes System anspielt genauso wie ich auch (Würde ich zumindest so machen..).
Solltest hier vielleicht nach den stichworten Service und Remoting suchen.
Hier ist vielleicht ein Request - Response Modell zu denken
User stempelt
Client schickt request zum Server
Server schreibt in die Datenbank
Server schickt Response inkl. Uhrzeit.
Client zeigt gestempelte uhrzeit an..
das der Client direkt sqlbefehle zum server schickt halte ich eher für ungünstig, da der client so username und pw der datenbank kennen muss etc.
Hallo budi1602
Ich würde glaube ich gar nicht auf die Client Zeit zurückgreifen und dem Server direkt die Anfrage senden, der kann dann mit seiner eigenen Zeit Arbeiten. (ich denke das Serverseitig auch ein Program von dir läuft?). falls die Verbindung reißt würde ich im Request nur die Timespan mitgeben die seit des Stempelns vergangen ist.
Die Exception spricht für sich würde ich sagen. Entweder sind die Remoteverbindungen disabled, die Netzwerkprotokolle abgschaltet, ne Firewall dazwischen etc..
Hi,
ein paar mehr Informationen wären toll..
Wie sieht es z.B. mit der Prozessorauslastung und dem Speicher aus?
Ausserdem würde ich um die Transaction ein using bauen.
Hmm sollen in einer Instanz deiner Klasse StammKatForm mehrere verschiedene ableitungen von DbContainer möglich sein oder immer nur eine? wenn immer nur eine Ableitung pro Instanz möglich sein soll würde ich das so lösen
public class StammKatForm<T> where T: dbObject
{
private dbContainer<T> m_katalog;
public StammKatForm(string _text, dbContainer<T> _katalog)
{
this.Text = _text;
m_katalog = _katalog;
}
}
Es handelt sich hier nicht zufällig um einen Cluster Server oder? die haben imho keine CPU Id
Wenn SOurceSafe solche Problem bringt.. solltet ihr vielleicht auf andere Programme wie CVS oder SVN umsteigen.
hmm Oxygen..,
naja für Fehler würde ich eher ein vernünftiges Exception Handling vorschlagen.. (da ist der Stacktrace schon drin..). Die Exception kann man dann inkl Stack ausloggen. Was das "normale Logging" angeht.. würde ich warscheinlich direkt am Entstehungsort den String zusammenbauen.. Das mit this durchschleifen ist wahrscheinlich garkeine so schlechte Idee.
//edit: ausserdem könnt dich die Klasse MethodBase interressieren..
Manchmal sehen unicode Zeichen gleich aus aber haben andere Byte muster.. aber das würde nicht erklären warum 0 und nicht -1 kommt.. sehr merkwürdig
@tscherno: warum denkst du ist das schmutzig? bis auf die tatsache das die initialisierung wirklich in der Mitte der Klasse passiert sehe ich nichts schmutziges..
also ich komme mit base oder this (oder auch ohne Prefix) an meine Methode Fupp dran.. da ist was anderes Faul.. bist sicher das du von der Klasse erbst?
Hallo,
public class BaseClass<T>
{
private IBusinessClass<T> _fupp;
public IBusinessClass<T> Fupp
{
get { return _fupp; }
set { _fupp = value; }
}
}
Wäre das ne option für deine Basisklasse?
würdest du dann in der abgeleiteten so setzten
public class DerviedClass : BaseClass<EmployeeBE>
{
public DerviedClass()
{
Fupp = microkerneletc.
}
}
Hallo kolli
---Enable Glaskugel.... Glaskugel enabled!!
Ich denke das es ein Problem mit den machwas Methoden gibt. Wenn die Fehler nicht auftreten wenn du sie einmal aufrufst, treten sie vielleicht bei mehrfachem Aufrufen auf.
ansonsten können wir Dir wahrscheinlich nichts sagen wenn wir nicht den Code von den Machwas Methoden sehen..
Benutzt du eine BindigSource? dann versuchs mal mit:
_source.EndEdit();
bevor du speicherst...
Probier mal einen delegate zu übergeben. Das hat bei mir zumindest gefluppt..
oder schreib dir einen C++ Wrapper. das geht meistens besser als mit dll Import zu arbeiten.