Autor Beitrag
mmgg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mi 16.07.14 21:17 
"sondern dass du nicht die nötigen Mittel kennst"
Du magst das so folgern, aus meiner Antwort "aber ILIst ist eine abstrakte Klasse..."
Was sollte man auch sonst Folgern?
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mi 16.07.14 21:33 
Dass dir Grundlagen fehlen ist klar, das war auch schon vorher klar, deshalb habe ich dir das Buch empfohlen, was sich nebenbei bemerkt ziemlich gut liest.
Hier klagt niemand irgendwen an, weil Grundlagen fehlen, aber ich finde es nicht gut, dass die Hilfe, die wir bieten, nicht angenommen wird.
mmgg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Sa 19.07.14 03:06 
user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
Dass dir Grundlagen fehlen ist klar, das war auch schon vorher klar,

Nein, ist nicht klar, Du glaubts das sehen zu können. Du bist einer von denen die so denken, bestimmt hast du auch die gute mehrheit auf deiner seite.


Zitat:
Einen Mathe-Prof würdest du wahrcheinlich doch auf die Schulbank schicken, wenn er die Formeln und Rechenwege nicht kennt, oder?

ho ho ho, wenn er die rechenwege nicht kennt.... gut, keep going, nice to meet you.
mmgg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Sa 01.11.14 22:24 
Die Lösung aus dem Dilemma:
stackoverflow.com/qu...nce-using-reflection

Hat man also eine KLasse wie diese, dann lässt sich _list so instanzieren:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public class ValidatingList<T> : IList<T>
{
    private  IList<T> _list;

    public ValidatingList()
    {
        _list = new List<T>(); // hier
    }

    //obligacions of this Interface
}


Auf der ersten Seite dieses Threads, schrieb ich irgendwo, dass ich IList nicht instanzieren kann, weil abstrakte Klassen nicht nicht nun mal nicht instanzieren lassen.
Es hätte natürlich Interface heissen müssen. Die Errormessage die ich immer wieder bekam hiess: "abstrakte Klasse oder Interface kann nicht..."
Ja, ist so, - nur wie dann?
Dass eine Variable vom Typ IList<T> sich so instanzieren lässt(wie oben) das konnte hier keiner schreiben, stattdessen festbeissen an meinem 'Versprecher'(Interface statt abstracte klasse) . Festgebissen, draufgestürtzt- so ungefähr: na Gott sei dank.

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 01.11.14 22:54 
Dein Code-Beispiel zählt im übrigen zu den absoluten Grundlagen überhaupt, womit wir wieder beim Thema wären ...


Ganz ehrlich, ich verstehe dein Problem nicht.
Gibt es überhaupt noch ein Problem, bei dem wir helfen können?
Ich bin auch thematisch komplett raus und habe keine Lust, alles nochmal zu lesen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 02.11.14 00:07 
Zitat:
Dass eine Variable vom Typ IList<T> sich so instanzieren lässt(wie oben) das konnte hier keiner schreiben,


Es hat keiner gesagt weil das falsch wäre. Hast du eventuell immer noch ein falsches Meta-model im Kopf was Interfaces sind?

Interfaces werden nicht instanziiert oder irgendwas in der Art. Interfaces sind ein reiner Vertrag mit der eine Klasse aussagt 'Ich kann die Dinge die Interface x verlangt'.
Und Variablen kann man genauso wenig instanziieren. Variablen zeigen auf Objekte von Klassen die instanziiert werden und möglicherweise ein Interface implementieren.
Ein Variable vom Typ IList<T> sagt also nur aus ich kann auf Klassen veweisen die IList<T> können. Welche das konkret ist ist der VAriablen egal.

Zitat:
stattdessen festbeissen an meinem 'Versprecher'(Interface statt abstracte klasse)


Das es ein Versprecher war weißt nur du. Deine Ausdrucksweise ließ(und lässt immer noch) anderes vermuten. Wir können bei sowas nur annehmen das du da was missverstanden hast und darauf hinweisen und versuchen es zu erklären. Wenn sich einer an was festbeißt bist du es in dem du alte Threads ausgräbst um irgendwas zu beweisen von dem ich nicht weiß was das sein soll.
mmgg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Di 04.11.14 19:56 
Eure Antworten in einer Talkshow plaziert, würde man sie bewerten als: Die Kunst den anderen absichtlich falsch zu verstehen.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 04.11.14 20:15 
Wenn du das so schreibst, dann zitiere ich einmal mich selber und kommentiere das Geschriebene im Bezug auf deine letzte Antwort:

Zitat:
Dein Code-Beispiel zählt im übrigen zu den absoluten Grundlagen überhaupt, womit wir wieder beim Thema wären ...


Code kann man nicht falsch verstehen, man kann ihn nur gar nicht verstehen.


Zitat:
Ganz ehrlich, ich verstehe dein Problem nicht.
Gibt es überhaupt noch ein Problem, bei dem wir helfen können?
Ich bin auch thematisch komplett raus und habe keine Lust, alles nochmal zu lesen.


Ich beziehe mich hier überhaupt auf nichts vorher gesagtes, sondern auf den Thread an sich.
Ich habe um eine Auskunft gebeten, ob es noch ein Problem gibt, bei dem wir helfen können.

Deiner Antwort nach vermutlich eher nicht, also kann ich mir diese sinnlose Diskussion im Grunde auch sparen.
Wenn es noch etwas thematisches gibt, wo wir helfen können, sag Bescheid und dann helfe ich auch gerne - voraus gesetzt, du nimmst Hinweise und Tipps auch so an, wie sie geschrieben wurden.
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Di 04.11.14 23:47 
Bevor sich hier die Emotionen noch höher schaukeln sage ich auch mal was.

Das hier ist ein Forum und dafür da, dass Entwickler anderen Entwicklern helfen, wenn diese Probleme haben. Jeder hier hat mit Sicherheit auch besseres zu tun als Andere zu ärgern. Also sollten wir uns alle unsachlichen Kommentare sparen, da die Niemandem helfen - weder dir, noch den Leuten die dir helfen wollen. Und nur weil die "Post-Frequenz" momentan nicht so hoch ist, heißt das nicht, dass die Qualität nachlässt.

Und jetzt zu deinem Problem:
Da hier scheinbar mehrere Personen dein Problem nicht identifizieren können würde ich einfach mal vorschlagen, dass du uns nochmal folgende Infos gibst:

1. Was hast du vor bzw. was willst du erreichen?
2. Wo tritt dein Problem auf, bzw. was verstehst du nicht?
3. Was hast du bisher versucht und was ist dein aktueller Stand der Problemlösung (Quellcode)?


Ich kann hier leider auch nur spekulieren, da ich dein Problem auch nicht sicher verstehe. Für mich sieht es so aus, als hättest du eine Liste mit int-Werten. Zu dieser Liste dürfen keine Zahlen mit dem Wert 0 hinzugefügt werden (wegen Division durch 0 nehme ich an). Ein Lösungsansatz, der relativ leicht ist, wäre eine ObservableCollection<T>:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
 class DeineKlasse
    {
        public ObservableCollection<int> IntListe { get; private set; }

        public DeineKlasse()
        {
            IntListe = new ObservableCollection<int>();
            IntListe.CollectionChanged += IntListeOnCollectionChanged;
        }

        //Hier wird ein neuer WERT zu der Liste hinzugefügt. Das Listen-Objekt bleibt aber das gleiche!!!

        private void IntListeOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            // Wenn neue Werte hinzugefügt wurden, einfach alle Werte mit 0 aus der Liste löschen
            // (falls welche vorhanden sind)

            if (e.Action == NotifyCollectionChangedAction.Add) IntListe.Remove(0);
        }
    }

Von außen kannst du das Teil dann wie eine normale Liste behandlen, sprich:
ausblenden C#-Quelltext
1:
2:
3:
DeineKlasse klasse1 = new DeineKlasse();
klasse1.IntListe.Add(2);
klasse1.IntListe.Add(0);

Deine Liste sollte danach nur die 2 beinhalten. Die 0 wird zwar kurz hinzugefügt, aber sofort wieder gelöscht.

Falls hier fachlich etwas nicht korrekt sein sollte bitte anmerken. Ich verwende die ObservableCollection<T> eigentlich nicht.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
mmgg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Sa 08.11.14 21:19 
user profile iconC# hat folgendes geschrieben Zum zitierten Posting springen:
Das hier ist ein Forum und dafür da, dass Entwickler anderen Entwicklern helfen, wenn diese Probleme haben.

Ja, so solle es sein.

Und nun zu allem weiteren, du willst sagenPalladin hätte auch ncht gewusst wie man eine IList deklariert?
Sorry, versuch schritt zu halten
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 08.11.14 23:54 
Okay, um das ganze Chaos hier mal auf einen Punkt zu bringen, habe ich mir die Beiträge vorher durchgelesen.

Anscheinend hast du dich nach meinem Kommentar
Zitat:
IList ist ein Interface und List implementiert dieses Interface.

Du solltest dringend die Grundlagen nacholen
Auf galileo computing gibts ein Buch, das nennt sich Visual C# 2012

ein bisschen angefressen gefühlt und dafür zumindest Sorry.

Dennoch nehme ich meine Aussage nicht zurück, denn es zählt unter Grundlagen, dass IList ein Interface ist und nicht instanziiert werden kann.
Wie man dennoch eine Instanz mit dem Typ IList bekommt, habe ich ebenfalls genannt, indem ich dich darauf hingewiesen habe, dass die Klasse List das Interface IList implementiert.
Auch das sind Grundlagen.

Es hatte nie etwas damit zu tun, dass du IList als abstrakte Klasse bezeichnet hast, sondern damit, dass du nicht wusstest, wie man eine Instanz mit dem Typ IList bekommt, bzw. wie man Properties richtig nutzt. Daher ruhte meine Aussage zu den Grundlagen.
Was mich (und wahrscheinlich auch einige Andere) stört, ist, dass du dich nicht einfach damit abfinden kannst, das dir Grundlagen fehlen (so ist zumindest mein Eindruck). Ich will nicht sagen, dass das schlimm ist, schließlich fängt jeder mal an, aber gerade Anfänger sollte auch auf die Tipps hören, die ihnen von erfahreneren Entwicklern gegeben werden.

Ich bin kein Moderator und kann kein Machtwort sprechen und ich wette auch, in meinen Beiträgen war bestimmt die eine oder andere Formulierung, die diese Situation begünstigt hat. Dennoch würde ich dich bitten, das Thema jetzt endlich ruhen zu lassen, damit wir zum eigentlichen Thema zurück kehren können. Das bedeutet, dass du uns endlich dabei hilfst, deine Problemstellung zu verstehen, nur dann können wir dir auch helfen.



PS @ C#:

Ich finde deine Lösung mit der ObservableCollection etwas unglücklich gewählt.
Das ist zwar eine schnelle und einfache Lösung, aber meiner Auffassung nach nicht gut, denn beim Aufruf einer Add-Methode erwartest du ja, dass das Item hinzu gefügt wird.
Wenn das Item die Validierung aber nicht besteht, wird es wieder entfernt und der Aufrufer erhält darüber keine Information. Im Gegenteil, er erhält dennoch die Information, dass das Item hinzu gefügt wird (über das CollectionChanged-Event).
Du kannst auch nie sicher stellen, dass die Methode zum Validieren an erster Stelle aufgerufen wird, weshalb andere Methoden, die von dem Event aufgerufen werden, schon mit der fertigen Liste und dem fehlerhaften Wert arbeiten.

Die ObservableCollection hat eher einen anderen Grund: Sie implementiert INotifyCollectionChanged und dient dazu, dass Nutzer über Änderungen in der Liste informiert werden.
Ein Anwendungsfall, wo die Liste Gold wert ist, sind Auflistungen in WPF. Die Liste kann sich jeder Zeit ändern und durch INotifyCollectionChanged reagiert die View automatisch darauf.

Ich möchte daher noch mal auf meine Implementierung "ValidatingList eine Seite zuvor hinweise. Die validiert noch vor dem Hinzufügen in die Liste und wirft eine Exception, wenn der Wert nicht stimmt.
Man könnte das auch anders machen, z.B. indem nicht IList implementiert, sondern von List (oder Collection) abgeleitet und die Add-Methode überschrieben wird. Das ist denke ich geschmackssache.

Für diesen Beitrag haben gedankt: C#
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 09.11.14 10:42 
Nur zur Info: ich habe dieses Thema schon verfolgt, und war auch kurz davor, ihn zu schließen - aber ich wollte niemanden eine Antwort vorenthalten.

Ich denke aber, daß jetzt inhaltlich alles zu diesem Thema geschrieben wurde und daher dieses Thema jetzt ruhen sollte.

Btw: die Lösung mittels ObservableCollection (und Löschen des Eintrags nach der Validierung) halte ich auch hier nicht für die Beste.