int vs System.Int32
-
Guten Morgen!
Erst mal vielen Dank für die all die Antworten.
mogel schrieb:
void* schrieb:
Nur weil das einer der C#-Guru-Freelancer so will und ich als C++-ler keine Stimme habe...
lass mich raten ... sein Müll läuft nicht und Du sollst es ausbaden?
Nicht ganz...da hier gerade für ein neues Projekt C# eingeführt wird, hat man beschlossen, für ein paar Monate einen C#-Guru zum Team dazu zu packen. Und jetzt vermittelt er eben seine Ansichten von "richtigem" C#. Und da ich erst seit 2 Wochen mit C# am Start bin, fällt es mir noch schwer Details richtig einzuordnen. Wobei man ehrlicherweise sagen muss, dass das Meiste, dass er sagt ganz stimmig ist. Aber abwarten...
Und jetzt bastele ich eben einen Generator für seine Service-Schnittstelle (nach seinen Anforderungen).Mein Zwischenfazit:
1. int entspricht im wesentlichen System.Int32, wobei es syntaktische Feinheiten gibt (int ist ein Schlüsselwort, für Int32 braucht man System...).
2. Nach der reinen C#-Lehre ist es (nur aus ästhetisch Gründen!) schöner int anstatt System.Int32 und string anstatt String usw. zu verwenden.Jetzt aber nochmal zurück zu meiner ursprünglichen Frage:
Gibt es einen vorgefertigten Weg vom C#- zum .Net-Typ oder müsste ich mir ein eigenes Mapping bauen (egal, ob das jetzt besonders sinnig ist oder nicht), z.B. aus der Tabelle aus ascs Link?
-
in dem zusammenhang faellt mir immer wieder auf das sehr viele
"string bla = "bla";" schreiben aber dann immer
"String.Parse(var);" verwendenich persoenlich schreibe immer das alias
"string bla = "bla";"
"string.Parse(var);"
allein schon wegden der syntax highlighting #ggum zum thema zurueck zu kommen
ich denke nicht das es ein fertigen weg gibt um an den string "int" zu kommen vom typen Int32 - da es zur laufzeit einfach kein "int" mehr gibt
entweder dein guru lebt damit (ein c# guru der nicht Int32 lesen will?) oder du schaltest immer ein eigenes mapping dazwischen wenn es um die ausgabe des types geht
short = Int16
int = Int32
long = Int64
double = Double
string = String
void = Void
bool = Boolean
mit uint, float usw gabs auch was - kenn die .net typen dafuer aber grad nicht
-
void* schrieb:
Nicht ganz...da hier gerade für ein neues Projekt C# eingeführt wird, hat man beschlossen, für ein paar Monate einen C#-Guru zum Team dazu zu packen. Und jetzt vermittelt er eben seine Ansichten von "richtigem" C#.
der soll Euch C# bei bringen und nicht als Evangelist auftreten wie ER es für richtig hält
Gibt es einen vorgefertigten Weg vom C#- zum .Net-Typ oder müsste ich mir ein eigenes Mapping bauen (egal, ob das jetzt besonders sinnig ist oder nicht), z.B. aus der Tabelle aus ascs Link?
bau eine kleines Projekt mit einer Klasse ... darin sind 2 Funktionen ... die Parameter einmal als int und einmal als Int32 ... kompilieren und in Reflector reinziehen ... da dürfte dann 2 mal Int32 stehen ... also ist seine Diskussion fehl am Platz und zeigt das er nur seine kleine Welt für Richtig hält -> Fachidiot
-
Mr Evil schrieb:
in dem zusammenhang faellt mir immer wieder auf das sehr viele
"string bla = "bla";" schreiben aber dann immer
"String.Parse(var);" verwendenSchreibe ich auch immer so, da ich "string" als Datentyp ansehe und "String" als Klasse (d.h. für den Aufruf von statischen Methoden). Und auch "String" als Klasse wird vom VS ge'highlighted'.
("string.Parse(var)" empfinde ich als unpassend, da es gerade vom VS als Schlüsselwort angezeigt wird, obwohl dort keine Anweisung ausgeführt wird, wie bei "if", "while" oder "return" - und ich ändere es auch bei Code ab, der mir in die Hände fällt -)
-
Mr Evil schrieb:
ich denke nicht das es ein fertigen weg gibt um an den string "int" zu kommen vom typen Int32 - da es zur laufzeit einfach kein "int" mehr gibt
Ok, das habe ich mir schon fast gedacht, nach dem Rest der Diskussion. Thx. Also bau ich mir ein eigenes Mapping, wenn er darauf (be-)steht
.
Mr Evil schrieb:
entweder dein guru lebt damit
Ich hab ihn doch gar nicht ausgesucht...
Mr Evil schrieb:
(ein c# guru der nicht Int32 lesen will?)
Scheint so...
mogel schrieb:
der soll Euch C# bei bringen und nicht als Evangelist auftreten wie ER es für richtig hält
Dich lade ich mal hier her ein. Gibt auch Zopf gratis!
mogel schrieb:
bau eine kleines Projekt mit einer Klasse ... darin sind 2 Funktionen ... die Parameter einmal als int und einmal als Int32 ... kompilieren und in Reflector reinziehen ... da dürfte dann 2 mal Int32 stehen ... also ist seine Diskussion fehl am Platz und zeigt das er nur seine kleine Welt für Richtig hält -> Fachidiot
Sollte ich mal machen. Allerdings sollte ich zusätzlich einmal als x64 und einmal als x86 kompilieren, dann sieht man das es wirklich wurscht ist.
Nochmals Danke Euch allen!
-
void* schrieb:
2. Nach der reinen C#-Lehre ist es (nur aus ästhetisch Gründen!) schöner int anstatt System.Int32 und string anstatt String usw. zu verwenden.
Das ist spätestens dann Unsinn, wenn es um Reflection geht.
Das System sagt dann das Ding heisst "Int32", und damit erübrigt sich IMO jegliche Diskussion. Mapper zu basteln die das immer abändern halte ich für wenig Sinnvoll.Eine Ausnahme die mir einfällt wäre IMO wenn man einen Doku-Generator oder Logausgaben etc. mit Funktions-Prototypen füttern will. Da würde ich auch "int" vorziehen - ist halt doof wenn in der Doku überall "Int32" steht, und im Programm überall "int".
-
hustbaer schrieb:
"int" ist auch 100% eindeutig
es ist bloss weniger "verbose". was ich persönlich gut finde, worüber man aber natürlich streiten kann.Nö, ist es nicht!
int ist eine Abbildung von primitiven Datentypen auf die Typen der FCL. System.Int32 ist der direkte Aufruf der FCL-Typen. long wird int C# auf Int64 abgebildet, in C++/CLI allerdings auf Int32.
Beim Aufruf der FCL-Typen werden automatisch alle Missverständnisse aus dem Weg geräumt.
-
AmunRa schrieb:
hustbaer schrieb:
"int" ist auch 100% eindeutig
es ist bloss weniger "verbose". was ich persönlich gut finde, worüber man aber natürlich streiten kann.Nö, ist es nicht!
int ist eine Abbildung von primitiven Datentypen auf die Typen der FCL. System.Int32 ist der direkte Aufruf der FCL-Typen. long wird int C# auf Int64 abgebildet, in C++/CLI allerdings auf Int32.
Beim Aufruf der FCL-Typen werden automatisch alle Missverständnisse aus dem Weg geräumt.
Ja, laber.
Es geht hier um C#, und "C#" + "int" = eindeutig. Anders gesagt: wenn ich in einem C# Programm ein "int" stehen habe, dann ist das eindeutig.Klar jetzt?
-
hustbaer schrieb:
Klar jetzt?
Sir, yes, sir.
-
hustbaer schrieb:
Ja, laber.
Es geht hier um C#, und "C#" + "int" = eindeutig. Anders gesagt: wenn ich in einem C# Programm ein "int" stehen habe, dann ist das eindeutig.Klar jetzt?
Du solltest mal an Deinen Ausdrücken arbeiten Du Spinner.
Das war ein Beispiel, bloß nicht mal über den Tellerrand gucken.Hustbaer Du bist mit Abstand der größte Idiot hier im Forum.
Und viel Ahnung hast Du nicht.
Hast Du überhaupt schon einen PC, oder hast Du noch immer Deinen C64? Du Vollspacken...
-
Fettbemme schrieb:
...
aha
-
hustbaer schrieb:
Ja, laber.
Es geht hier um C#, und "C#" + "int" = eindeutig. Anders gesagt: wenn ich in einem C# Programm ein "int" stehen habe, dann ist das eindeutig.Du hast keine Ahnung wovon du redest. Ich empfehle dir das Buch "Programmierung in C# - Expertenwissen zur CLR und dem .NET-Framework" von Jeffrey Richter.
Dort wird dir das noch einmal genauer erklärt, was ich oben bereits angedeutet habe. Solltest du unbedingt einmal lesen, damit du in Zukunft nicht soviel Unsinn verbreitest!
-
AmunRa schrieb:
Du hast keine Ahnung wovon du redest...
Dann lies bitte auch die Links aus der MSDN die ich bereits gepostet habe. Den entweder ist die MSDN (+ einige Fachbücher) falsch, oder hustbaer hat mit seiner Aussage recht.
"int" ist innerhalb eines C#-Programmes laut den MSDN-Artikel IMMER ein System.Int32. Für andere .Net Sprachen mag das wieder anders aussehen, die Aussage zu C# gilt aber dennoch oder beweise bitte das Gegenteil.
AmunRa schrieb:
...damit du in Zukunft nicht soviel Unsinn verbreitest!
Vielleicht auch mal an die eigene Nase fassen...
cu André
-
asc schrieb:
Dann lies bitte auch die Links aus der MSDN die ich bereits gepostet habe. Den entweder ist die MSDN (+ einige Fachbücher) falsch, oder hustbaer hat mit seiner Aussage recht.
"int" ist innerhalb eines C#-Programmes laut den MSDN-Artikel IMMER ein System.Int32. Für andere .Net Sprachen mag das wieder anders aussehen, die Aussage zu C# gilt aber dennoch oder beweise bitte das Gegenteil.
Und du solltest lesen lernen, bevor du den Klugscheißer raushängen lässt!
Ich hatte nirgends behauptet das ein int in C# etwas anders als ein System.Int32 wäre. Im Gegenteil, im ersten Beitrag hatte ich das sogar explizit beschrieben.
Meine Aussage war das int im Gegensatz zu System.Int32 beim Programmierer zu Missverständnissen führen kann, weil der primitive Datentyp in anderen .NET-Sprachen auf einen anderen FCL-Datentyp abgebildet wird. Gleichzeitig kann es zu weniger offensichtlichen Zeilen kommen, wie z.B.
float val = br.ReadSingle();
ist nicht so selbsterklärend, wie
Single val = br.ReadSingle();
Darüberhinaus behandelt der Compiler bei der Abbildung von int in Int32 den Code nicht immer umfassend gleich. So ist es möglich ein Enum mit
public enum Number : int { one = 0 }
zu beschreiben, während
public enum Number: Int32 { one = 0 }
zu einem Fehler führt. Hast du das nun kapiert?
-
ja, mr. ra grosser gott des programmierens, es ist natürlich ganz schlimm, wenn man in C# etwas schreibt, was nur in C# eindeutig ist, aber in irgendeiner anderen sprache was ganz anderes bedeuten könnte.
d.h. man darf in C# ab jetzt auch keine finalizer mehr implementieren, weil die gleiche syntax in C++/CLI ja IDisposable implementieren würde.
mach dich bitte nicht lächerlich.
-
Popcorn - frischen Popcorn ... will jemand frisches Popcorn kaufen?
-
mogel schrieb:
Popcorn - frischen Popcorn ... will jemand frisches Popcorn kaufen?
Mmmh, ich fürchte da müssen wir noch etwas Öl ins Feuer giessen, sonst besteht die Gefahr,
dass der Streit aus so lächerlichem Anlass nicht sehr lange andauert
-
hustbaer schrieb:
d.h. man darf in C# ab jetzt auch keine finalizer mehr implementieren, weil die gleiche syntax in C++/CLI ja IDisposable implementieren würde.
Du bist ein Dummschwätzer!
1. Ich habe nirgends ausgesagt man dürfe in C# nicht die primitiven Datentypen verwenden, ergo ist deine Anspielung blanker Unsinn!
2. Dein Vergleich hinkt. Ein finalizer ist in C++ nicht dasselbe wie die Finalize-Methode. Das lässt sich schon daran erkennen, wie Finalize und Dispose in C#und C++/CLI implementiert werden. Bei den primitiven Datentypen ist die Verwechslungsgefahr deutlich stärker gegeben, vor allem deshalb weil die meisten primitiven Datentypen in gleiche FCL-Typen abgebildet werden, allerdings einige wenige nicht.
-
Der Tonfall von hustbaer war vielleicht nicht ganz ok, aber ich kann beim besten Willen nicht erkennen, wie
hustbaer schrieb:
wenn ich in einem C# Programm ein "int" stehen habe, dann ist das eindeutig.
und
AmunRa schrieb:
Du hast keine Ahnung wovon du redest. [...] damit du in Zukunft nicht soviel Unsinn verbreitest!
angesichts der weiteren von AmunRa getätigten (fachlichen) Ausführungen zusammenpassen.
-
LordJaxom schrieb:
angesichts der weiteren von AmunRa getätigten (fachlichen)
Ausführungen zusammenpassen.Weil Hustbaer sich was aus den Fingern saugt was keiner gesagt hat.
Lies Dir das mal durch Hustbaer, kannst Du lesen Dicker?