Autor Beitrag
chelys
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 06.08.07 14:30 
Also ich steige gerade von Pascal um und arbeite mich in objektorientiertes Programmieren ein... In einem Buch habe ich gelesen, es sei möglich den Typ eines Objekts erst während des Programmverlaufs festzulegen und vorab einfach 'object' zu verwenden...
Hab mir geadacht; na prima, genau das suchst du ja - nur klappt die Umsetzung eben nicht

hier der vollständige code mit Compilerfehler...

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
using System;
using System.Collections.Generic;

namespace Prog_006
{
  class MainClass
  {
    public static void Main()
    {
      object NeuObjekt;
      NeuObjekt = new Test();
      
  //  die nächste Zeile gibt diesen Compilerfehler aus: 
  //  'object' does not contain a definition for 'TestString'(CS0117)
      Console.WriteLine(NeuObjekt.TestString);
      Console.ReadKey();
    }
  }
  
  class Test     
  {
    public string TestString = "erfolgreich";
  }
}


also ich weiß, dass die Anordnung 'object NeuObjekt;' und 'NeuObjekt = new Test();' hier etwas sinnlos ist, aber es geht ja darum, dass später ne ganze Menge code zwischen die beiden Befehle soll...

damit wäre dann gleich eine zweite Frage verbunden: wenn ich ein Object in einer if Abfrage erzeuge, dann akzeptiert der Compiler es nicht, wenn ich außerhalb der Abfrage auf dieses Objekt zugreifen will - also ungefähr in der Art hier:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
if ( 1 != 2)
{
  Test Obj = new Test();
}
Console.Wirteln(Obj.TestString);  // wird weiter unten im Prog. definiert...

[...]




also es wäre nett, wenn ihr mir irgendwie helfen könntet und mir sagt, wie ich hier ans Ziel komme (ich will eine Datei auslesen wortweise nach speziellen Kriterien [if...] jeweils verschiedene Objekte [Nomen, Adjektiv usw...] erstellen - aber die einzigen zwei Möglichkeiten, die ich Moment sehe sind diese:
1. Eine Reihe abstrakter objects erstellen und später zuweisen (führt zu Problem 1)
2. in if Abfragen Objekte erstellen (Problem 2)



ich bedanke mich schonmal im vorraus für eure Hilfe und entschuldige mich für den doch recht langen Post...
Gruß Chelys

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Mo 06.08.07 14:41 
Bitte den Code in CS-Tags stellen!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 06.08.07 15:44 
Hallo Chelys,

falls Dir einführende Literatur fehlt: Empfehlenswert ist auf jeden Fall das OpenBook C#.
Zitat:
In einem Buch habe ich gelesen, es sei möglich den Typ eines Objekts erst während des Programmverlaufs festzulegen und vorab einfach 'object' zu verwenden...

Das ist zwar nicht falsch, aber - wie Du gemerkt hast - schwierig; also verzichte lieber generall darauf (jedenfalls für die nächsten Monate).

Du siehst bei Deinem Versuch u.a. Folgendes:
  • Du musst zwischen den verschiedenen Typen genau unterscheiden. Ist NeuObjekt denn vom Typ "Test" oder vom Typ "object"?
  • Ein Typ (konkret: object), den Du verwendest, muss die benötigten Elemente (konkret: TestString) kennen. Allenfalls kannst Du folgende Konstruktion benutzen:
    ausblenden C#-Quelltext
    1:
    2:
    3:
    4:
    Test NeuObjekt = new Test();
    if (NeuObjekt is TestObject) {
        Console.WriteLine((NeuObjekt as TestObject).TestString);
    }

    Aber dann kannst Du natürlich auch TestObject, das TestString kennt, direkt verwenden.
  • Eine Variable muss innerhalb des Blocks deklariert werden, in dem sie verwendet wird; außerhalb ist sie unbekannt. Deshalb ist in Deinem zweiten Beispiel Obj nur innerhalb von {...} bekannt und sofort anschließend unbekannt.

Ich hoffe, es hilft Dir beim Verständnis. Jürgen
chelys Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 13.08.07 13:55 
nun danke erstmal...

könnt ihr mir auch einen Tip geben, wie ich mein Problem am besten umgehe?

also ich will einen string aus einer Datei auslesen, dann ein passendes Objekt erstellen (Nomen, Verb, Adjektiv...), dann ganz viele andere Dinge machen (Statistiken ausrechnen, Liste ordnen usw.) und dann mit dem zuvor erzeugten Objekt arbeiten...

Dass das Erstellen des Objektes in einer if-abfrage (oder etwas Vergleichbarem) geschehen muss scheint mir notwendig. Gleichwohl aber komme ich nicht umhin den if-block irgendwann zu verlassen. Erst an einem späteren Punkt im Programmverlauf will ich dann wieder mit dem Objekt arbeiten, dass nun aber unbekannt ist, weil ich nicht mehr im if-block stecke.

Wie nun spreche ich mein Objekt an???
Soll ich am Anfang leere Pseudoobjekte erzeugen, und dann jedesmal eine Abfrage vorschalten, die klärt, welches von denen ich im letzten if-blockk gefüllt habe? Das wär doch alles andere als elegant und mein Gefühl sagt mir, dass es auch einfacher gehen muss...