Autor |
Beitrag |
moepat
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 21.12.10 10:48
Hallo,
ich würde gerne mit einem Perl-Script eine C#-Class erstellen, habe allerdings einige Probleme:
ich habe ein Array welches wie folgt aussieht:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| { {"name1", 0001, 21, 1121, 1233454571}, {"name2", 0002, 22, 1122, 1233454572}, {"name3", 0003, 23, 1123, 1233454573}, {"name4", 0004, 24, 1124, 1233454574}, } |
zudem ein struct:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| struct registers { string name; ushort addr; byte size; ushort abc; ushort def; } |
ich möchte jetzt auf meine elemente wie folgt zugreifen:
array[0].name # ausgabe soll dann ein string mit "name1" sein
oder
array[2].def # soll mir dann 1233454574 liefern
ich arbeite noch nicht wirklich lange mit C# und komme eher von der ASM bzw Scripting Seite.
Ich hoffe ich bin hier richtig und irgendjemand kann mir helfen.
mein jetziger Code: (welcher nicht funktioniert  )
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: 25: 26: 27: 28: 29:
| class SFRmasks { struct register_info_t { string name; ushort addr; byte size; ushort reset_value; ushort reset_value_mask; }
class SFR { register_info_t getSFR(int index) { return table[index]; } }
class CRC_SFRs : SFR { register_info_t[] table = { {"name1", 0001, 21, 1121, 1233454571}, {"name2", 0002, 22, 1122, 1233454572}, {"name3", 0003, 23, 1123, 1233454573}, {"name4", 0004, 24, 1124, 1233454574}, }; } } |
mfg
moepat
|
|
moepat 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 21.12.10 11:48
Hi,
also hab das Problem jetzt gelöst, allerdings mit einer List.
Mich würds allerdings intressieren ob mein erster Ansatz komplett daneben war oder ob man es auch iwie so lösen kann?
mfg
moepat
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 21.12.10 11:57
Hallo,
so einfach wie in C oder Scriptsprachen lassen sich Arrays nicht in C# erstellen.
Zudem hast du noch zwei weitere Fehler drin:
- aus der Klasse SFR kannst du gar nicht auf 'table' zugreifen, da diese ja in einer davon abgeleiteten Klasse 'CRS_SFR' deklariert ist (entweder alles in eine Klasse packen oder aber die Variable 'table' als 'virtual' bzw. 'abstract' in der Basisklasse deklarieren
- du beachtest die Zugriffsmodifizierer gar nicht - standardmäßig sind diese 'private', d.h. von außen hat man keinen Zugriff darauf (du müßtest sie mindestens 'internal' oder aber 'protected' machen oder eben 'public'), denn C# ist streng OOP (objektorientiert).
Um dann die Arrays zu deklarieren gibt es zwei Möglichkeiten.
1. einen öffentlichen Konstruktor für die Struktur definieren (mit allen Parametern)
2. automatische Eigenschaften generieren (besser als öffentliche Member) - geht aber erst ab C# 3.0 (d.h. VS2008):
C#-Quelltext 1: 2: 3: 4: 5:
| struct register_info_t { public string Name [ get; set; } } |
Um nun konkret das Array zu deklarieren gibt es nun entsprechend oben zwei Möglichkeiten:
1. mittels 'new' den passenden Konstruktor aufrufen:
C#-Quelltext 1: 2: 3: 4:
| register_info_t[] table = { new register_info_t("name1", 0001, 21, 1121, 1233454571), |
2. mittels Object-Initializer (auch erst ab C# 3.0), s. z.B. www.codeproject.com/KB/cs/csharp3.aspx:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| register_info_t[] table = { new register_info_t() { Name = "name1", Addr = 0001, Size = 21, ... }, } } |
Wie im anderen C#-Forum aber schon geschrieben, wäre es besser, du beschäftigst dich erst ein wenig mit den Grundlagen, d.h. du schreibst selber mal den Code von Hand dafür (damit du auch die eventuellen Fehler nachvollziehen kannst), bevor du anfängst, per Script diesen zu generieren.
|
|
moepat 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 21.12.10 14:41
Hallo,
danke für deine Antwort!!!
also ich habs jetzt wie folgt gelöst: (erscheint mir auch um einiges einfacher als meine herangehensweise zuvor): 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| using System; using System.Collections.Generic; using System.Text;
namespace P40SupportFunctions { class SFRmasks { struct register_info_t { public string name; public ushort addr; public byte size; public ushort reset_value; public ushort reset_value_mask;
public register_info_t(string name, ushort addr, byte size, ushort reset_value, ushort reset_value_mask) { this.name = name; this.addr = addr; this.size = size; this.reset_value = reset_value; this.reset_value_mask = reset_value_mask; } }
class SFR { protected List<register_info_t> register_list = new List<register_info_t>();
register_info_t getSFR(int index) { return register_list[index]; } }
class SFRs : SFR { public void CRC() { register_list.Add(new register_info_t("name1", 0x01, 0x10, 0x1000, 0x1000)); register_list.Add(new register_info_t("name2", 0x02, 0x20, 0x2000, 0x2000)); register_list.Add(new register_info_t("name3", 0x03, 0x30, 0x3000, 0x3000)); }
public void CRYPTO() { register_list.Add(new register_info_t("name4", 0x04, 0x40, 0x4000, 0x4000)); register_list.Add(new register_info_t("name5", 0x05, 0x50, 0x5000, 0x5000)); register_list.Add(new register_info_t("name6", 0x06, 0x60, 0x6000, 0x6000)); } } } } |
ist auch wirklich einfach mit dem Script zu generieren!
werd jetzt noch bisschen weiter lesen gehen
aber vielen dank fürs rein schaun!
mfg
moepat
|
|
|