TroaX hat geschrieben:1. Die .NET Sprachen sind alle strikt objektorientiert. [...] Anders als in PHP sind die Klassen des .NET objektorientiert designed und bieten keine statischen Objekte als Möglichkeit, Methoden funktional ohne Objektinstanz zu nutzen.
Statische Methoden brauchen keine Objektinstanz, und somit ist prozedurale Programmierung auch möglich.
Ganz simples Beispiel, wobei die Funktion "WriteLine" der Klasse Console statisch ist:
Code: Alles auswählen
using System;
class Program {
static void Main() {
Console.WriteLine("Hallo!");
}
}
So kannst Du auch selbst programmieren und statische Methoden erstellen, die das Gleiche sind wie eine
Procedure in PureBasic:
Code: Alles auswählen
using System;
class Program {
static void Main() {
int x = mul(3,5);
Console.WriteLine( sub(x, 12) );
Console.WriteLine( sub(add(3,6), 12) );
}
static int add(int a, int b) {
return a + b;
}
static int mul(int a, int b) {
return a * b;
}
static int sub(int a, int b) {
return a - b;
}
}
Nicht einmal ein 'Declare' ist hier nötig, wie praktisch.
TroaX hat geschrieben:Die Prozedur Str() aus PB zumn Beispiel ist das gleiche wie in .NET INTEGERVARIABLENNAME.toString().
ToString() gibt es für absolut JEDE Klasse, da diese Methode der Basisklasse 'Object' entstammt.
Somit kann man ToString() mit allen Klassen aufrufen und ist nicht wie bei PB auf ein paar einfache
Datentypen beschränkt. Das funktioniert auch mit float und double usw., also kein StrF() oder StrD() oder gar StrU() nötig.
Man nutzt immer ToString() - wie einfach!
Code: Alles auswählen
using System;
class Program {
static void Main() {
int x = 12;
Console.WriteLine( x.ToString() );
double d = 1.23456;
Console.WriteLine( d.ToString() );
address adr = new address() {
name = "John Boy",
street = "Karl-Marx-Allee 27",
zip = "12345",
town = "Potslin",
country = "Germany"
};
Console.WriteLine( adr.ToString() );
Console.WriteLine( new Window().ToString() );
}
}
class address {
public string name="";
public string street="";
public string zip="";
public string town="";
public string country="";
public override string ToString() {
return name + ", " + street + ", " + zip + " " + town + ", " + country;
}
}
class Window {
}
Wenn eine Methode einen String erwartet oder entspr. überladen wurde,
wird die Methode ToString() automatisch aufgerufen:
Code: Alles auswählen
using System;
class Program {
static void Main() {
int x = 12;
double d = 1.23456;
address adr = new address() {
name = "John Boy",
street = "Karl-Marx-Allee 27",
zip = "12345",
town = "Potslin",
country = "Germany"
};
//
// Wenn eine Methode einen String erwartet oder entspr.
// überladen wurde, wird .ToString() automatisch aufgerufen:
//
Console.WriteLine( x );
Console.WriteLine( d );
Console.WriteLine( adr );
Console.WriteLine( new Window() );
}
}
class address {
public string name="";
public string street="";
public string zip="";
public string town="";
public string country="";
public override string ToString() {
return name + ", " + street + ", " + zip + " " + town + ", " + country;
}
}
class Window {
}
TroaX hat geschrieben:4. .NET Sprachen werden in ByteCode compiliert und mit einem JIT in der Runtime nach und nach während der Ausführung in Maschinencode übersetzt und in einer Sandbox ausgeführt. Ich denke der Performanceunterschied dürfte im Vergleich zu PB schon spürbar sein

Natürlich kann der Unterschied spürbar sein. PB optimiert nicht viel, und ist deshalb -im Vergleich zu anderen Compilern- recht "langsam".
Ein JIT-Compiler dagegen kann für die aktuelle CPU optimieren, auf der das Programm gerade läuft, und somit ist das Ergebnis meist schneller
als PB-generierter Code, der auf 386er Prozessoren laufen soll und MMX, SSE(1,2,3,4) usw. nicht nutzt. Das ist ja der Sinn von Just-in-time Kompilierung.
Trotzdem läuft PB ja recht gut und wir können einigermassen zufrieden sein - für viele Anwendungen ist es vollkommen ausreichend, und
wer einen High-End Raytracer schreiben möchte, nimmt eben spezialisierte, hoch optimierende Compiler und eine geeignetere Sprache.
Die C# Beispiele kann sich jeder selbst kompilieren, wenn er das .NET Framework auf Windows installiert hat.
Der C# Compiler ist gleich kostenlos dabei. Test.cs in EXE kompilieren und ausführen (Den Pfad an installiertes Framework anpassen):
Code: Alles auswählen
c:\windows\microsoft.net\framework\v4.0.30319\csc /t:exe Test.cs
test.exe
Auf Mac OS X mit installiertem Mono: