Difference between revisions of "Pascal for CSharp users"
From Lazarus wiki
Jump to navigationJump to search (New page: {| border="1" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px solid; border-collapse: collapse;" ! C# ! Pascal ! Additional ...) |
|||
(20 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
− | {| | + | ==Syntax Comparison== |
− | ! | + | {| class="wikitable" |
− | ! | + | ! C# !! [[Pascal]] !! Additional comments |
− | ! | ||
|- | |- | ||
| { | | { | ||
Line 83: | Line 82: | ||
| // | | // | ||
| End of line comment (only one line comment) | | End of line comment (only one line comment) | ||
+ | |- | ||
+ | | #define | ||
+ | | {$Define } | ||
+ | | | ||
+ | |- | ||
+ | | #define | ||
+ | | {$SetC } | ||
+ | | Mac Pascal | ||
+ | |- | ||
+ | | #elif | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | | #else | ||
+ | | {$Else} | ||
+ | | | ||
+ | |- | ||
+ | | #else | ||
+ | | {$ElseC } | ||
+ | | Mac Pascal | ||
+ | |- | ||
+ | | #endif | ||
+ | | {$EndIf } | ||
+ | | | ||
+ | |- | ||
+ | | #endregion | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | | #error | ||
+ | | {$Fatal } | ||
+ | | | ||
+ | |- | ||
+ | | #if | ||
+ | | {$If } | ||
+ | | | ||
+ | |- | ||
+ | | #if | ||
+ | | {$IfC } | ||
+ | | Mac Pascal | ||
+ | |- | ||
+ | | #ifdef | ||
+ | | {$IfDef } | ||
+ | | | ||
+ | |- | ||
+ | | #ifndef | ||
+ | | {$IfNDef } | ||
+ | | | ||
+ | |- | ||
+ | | #pragma | ||
+ | | {$IfOpt } | ||
+ | | | ||
+ | |- | ||
+ | | #region | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | | #undef | ||
+ | | {$Undef } | ||
+ | | | ||
+ | |- | ||
+ | | #warning | ||
+ | | {$Hint } | ||
+ | | | ||
|- | |- | ||
| public static void Main(string[] args) { } | | public static void Main(string[] args) { } | ||
− | | [[Program]] | + | | [[Program]] ; [[Begin]] [[End]]. |
| Note the period after End | | Note the period after End | ||
|- | |- | ||
− | | | + | | []; |
− | | | + | | : [[Array]] [[Of]] ; |
| | | | ||
|- | |- | ||
− | | | + | | [#]; |
− | | | + | | : [[Array]][#..#] [[Of]] ; |
| | | | ||
|- | |- | ||
Line 108: | Line 171: | ||
| | | | ||
|- | |- | ||
− | | class | + | | class { } |
− | | | + | | = [[Class]] [[End]]; |
| Delphi OOP | | Delphi OOP | ||
|- | |- | ||
− | | class | + | | class { } |
− | | | + | | = [[Object]] [[End]]; |
| Turbo Pascal OOP | | Turbo Pascal OOP | ||
|- | |- | ||
− | | class | + | | class <T> { } |
− | | [[Generic]] | + | | [[Generic]] = [[Class]]<T> [[End]]; |
| Generics are classes only as of 2.2.2, likely to support more in the future | | Generics are classes only as of 2.2.2, likely to support more in the future | ||
|- | |- | ||
− | | | + | | Class() |
− | | [[Constructor]] | + | | [[Constructor]] |
| Constructor name is by convention either Init or Create | | Constructor name is by convention either Init or Create | ||
|- | |- | ||
Line 136: | Line 199: | ||
| | | | ||
|- | |- | ||
− | | enum | + | | enum { } |
− | | | + | | = (# .. #); |
| | | | ||
|- | |- | ||
− | | enum | + | | enum = { = #, } |
− | | | + | | = ( = #, ); |
| | | | ||
|- | |- | ||
| TheEnum enumVar; | | TheEnum enumVar; | ||
− | | | + | | := [[Set]] [[Of]] ; |
| | | | ||
|- | |- | ||
− | | | + | | class : |
− | | | + | | = [[Class]](TObject) |
| | | | ||
|- | |- | ||
Line 156: | Line 219: | ||
| for constants, not uninheritables | | for constants, not uninheritables | ||
|- | |- | ||
− | | for ++ | + | | for( = ; ; ++) |
| [[For]] [[To]] [[Do]] | | [[For]] [[To]] [[Do]] | ||
| | | | ||
|- | |- | ||
− | | for -- | + | | for( = ; ; --) |
| [[For]] [[Downto]] [[Do]] | | [[For]] [[Downto]] [[Do]] | ||
| | | | ||
+ | |- | ||
+ | | foreach( in ) | ||
+ | | [[For]] [[In]] | ||
+ | | [[for-in_loop|For .. in loop]] | ||
|- | |- | ||
| if() | | if() | ||
Line 176: | Line 243: | ||
| | | | ||
|- | |- | ||
− | | interface | + | | interface { } |
− | | | + | | = [[Interface]](IInterface) End; |
| | | | ||
|- | |- | ||
− | | new | + | | new [#]; |
− | | [[SetLength]]( | + | | [[SetLength]]( , #); |
| | | | ||
|- | |- | ||
− | | new | + | | new (); |
− | | | + | | := .Create; |
| | | | ||
|- | |- | ||
− | | namespace Name | + | | namespace Name { } |
− | | [[Unit]] | + | | [[Unit]] ; [[Interface]] [[Implementation]] [[End]]. |
| Note the period after End | | Note the period after End | ||
+ | |- | ||
+ | | out | ||
+ | | [[Out]] | ||
+ | | | ||
+ | |- | ||
+ | | override | ||
+ | | [[Override]] | ||
+ | | | ||
|- | |- | ||
| private | | private | ||
Line 202: | Line 277: | ||
| public | | public | ||
| [[Public]] | | [[Public]] | ||
+ | | | ||
+ | |- | ||
+ | | ref | ||
+ | | [[Variable_parameter|Var]] | ||
| | | | ||
|- | |- | ||
Line 211: | Line 290: | ||
| [[Result]] := | | [[Result]] := | ||
| ObjFPC or Delphi modes | | ObjFPC or Delphi modes | ||
+ | |- | ||
+ | | sealed | ||
+ | | sealed | ||
+ | | starting from fpc 2.5.1 | ||
|- | |- | ||
| static | | static | ||
Line 222: | Line 305: | ||
| static | | static | ||
| [[Class]] [[Procedure]] | | [[Class]] [[Procedure]] | ||
+ | | | ||
+ | |- | ||
+ | | struct { } | ||
+ | | = [[Record]] [[End]]; | ||
| | | | ||
|- | |- | ||
Line 228: | Line 315: | ||
| Parent constructor call | | Parent constructor call | ||
|- | |- | ||
− | | switch case break | + | | switch () { case: break; } |
− | | [[Case]] [[Of]] [[End]] | + | | [[Case]] [[Of]] [[End]] ; |
| | | | ||
|- | |- | ||
− | | switch case break default | + | | switch() { case: break; default: } |
| [[Case]] [[Of]] [[Else]] [[End]] | | [[Case]] [[Of]] [[Else]] [[End]] | ||
| | | | ||
Line 246: | Line 333: | ||
| try { } catch finally | | try { } catch finally | ||
| [[Try]] [[Finally]] | | [[Try]] [[Finally]] | ||
+ | | | ||
+ | |- | ||
+ | | unsafe | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | | virtual | ||
+ | | [[Virtual]] | ||
| | | | ||
|- | |- | ||
Line 258: | Line 353: | ||
| while | | while | ||
| [[While]] [[Do]] | | [[While]] [[Do]] | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | | [[Asm]] [[End]]; | ||
| | | | ||
|} | |} | ||
− | + | ==Types Comparison== | |
− | {| | + | {| class="wikitable" |
− | ! | + | ! C# type !! [[Pascal]] [[Data_type|type]] !! Size (bits) !! Range !! |
− | ! | ||
− | ! | ||
− | ! | ||
− | ! | ||
|- | |- | ||
| byte | | byte | ||
Line 273: | Line 368: | ||
| 8-bit | | 8-bit | ||
| -128 .. 127 | | -128 .. 127 | ||
+ | | | ||
+ | |- | ||
+ | | ubyte | ||
+ | | [[Byte]] | ||
+ | | 8-bit | ||
+ | | 0 .. 255 | ||
| | | | ||
|- | |- | ||
Line 279: | Line 380: | ||
| 16-bit | | 16-bit | ||
| -32768 .. 32767 | | -32768 .. 32767 | ||
+ | |- | ||
+ | | ushort | ||
+ | | [[Word]] | ||
+ | | 16-bit | ||
+ | | 0 .. 65535 | ||
+ | | | ||
|- | |- | ||
| int | | int | ||
Line 286: | Line 393: | ||
| | | | ||
|- | |- | ||
− | | | + | | uint |
− | | [[ | + | | [[LongWord]] |
| 32-bit | | 32-bit | ||
− | | | + | | 0..4294967295 |
| | | | ||
|- | |- | ||
Line 296: | Line 403: | ||
| 64-bit | | 64-bit | ||
| -9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807 | | -9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807 | ||
+ | | | ||
+ | |- | ||
+ | | ulong | ||
+ | | [[QWord]] | ||
+ | | 64-bit | ||
+ | | 0 .. 18 446 744 073 709 551 615 | ||
| | | | ||
|- | |- | ||
Line 324: | Line 437: | ||
| string | | string | ||
| [[String]] | | [[String]] | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | | datetime | ||
+ | | [[TDateTime]] | ||
| | | | ||
| | | | ||
Line 329: | Line 447: | ||
|- | |- | ||
|} | |} | ||
+ | |||
+ | ==C# Language Features Not available in Pascal== | ||
+ | * automatic memory management while - not available, except for reference counted types: strings (except for shortstrings), dynamic arrays | ||
+ | * lambda functions | ||
+ | * serialization (as syntax language) - you'd need to use explicit functions/procedures to convert to/from data structures | ||
+ | * LINQ | ||
+ | |||
+ | ==FPC Language Features not available in C #== | ||
+ | * [[Assembler]], [[Assembly language]] | ||
+ | * Multi-Platform Support | ||
+ | * Case-insensitive | ||
+ | [[Category:FPC]] | ||
+ | [[Category:Pascal]] | ||
+ | [[Category:C-Sharp]] |
Revision as of 14:34, 21 October 2018
Syntax Comparison
C# | Pascal | Additional comments |
---|---|---|
{ | Begin | |
} | End | |
= | := | Becomes |
== | = | Equal |
/ | / | Division (or sometimes div) |
% | Mod | Modulo operation |
! | Not | |
!= | <> | Not equal |
&& | And | |
|| | Or | |
^ | Xor | |
>> | Shr | bit shift right |
<< | Shl | bit shift left |
++ | Inc | |
-- | Dec | |
/* | { | Comment start |
/* | (* | Comment start |
*/ | } | Comment end |
*/ | *) | Comment end |
// | // | End of line comment (only one line comment) |
#define | {$Define } | |
#define | {$SetC } | Mac Pascal |
#elif | ||
#else | {$Else} | |
#else | {$ElseC } | Mac Pascal |
#endif | {$EndIf } | |
#endregion | ||
#error | {$Fatal } | |
#if | {$If } | |
#if | {$IfC } | Mac Pascal |
#ifdef | {$IfDef } | |
#ifndef | {$IfNDef } | |
#pragma | {$IfOpt } | |
#region | ||
#undef | {$Undef } | |
#warning | {$Hint } | |
public static void Main(string[] args) { } | Program ; Begin End. | Note the period after End |
[]; | : Array Of ; | |
[#]; | : Array[#..#] Of ; | |
null | Nil | |
abstract | Abstract | |
break | Break | |
class { } | = Class End; | Delphi OOP |
class { } | = Object End; | Turbo Pascal OOP |
class <T> { } | Generic = Class<T> End; | Generics are classes only as of 2.2.2, likely to support more in the future |
Class() | Constructor | Constructor name is by convention either Init or Create |
continue | Continue | |
do while | Repeat Until Not | |
do while ! | Repeat Until | |
enum { } | = (# .. #); | |
enum = { = #, } | = ( = #, ); | |
TheEnum enumVar; | := Set Of ; | |
class : | = Class(TObject) | |
const | Const | for constants, not uninheritables |
for( = ; ; ++) | For To Do | |
for( = ; ; --) | For Downto Do | |
foreach( in ) | For In | For .. in loop |
if() | If Then | |
if() else | If Then Else | |
using | Uses | |
interface { } | = Interface(IInterface) End; | |
new [#]; | SetLength( , #); | |
new (); | := .Create; | |
namespace Name { } | Unit ; Interface Implementation End. | Note the period after End |
out | Out | |
override | Override | |
private | Private | |
protected | Protected | |
public | Public | |
ref | Var | |
return | FunctionName := | |
return | Result := | ObjFPC or Delphi modes |
sealed | sealed | starting from fpc 2.5.1 |
static | Static | |
static | Class Function | |
static | Class Procedure | |
struct { } | = Record End; | |
base | Inherited | Parent constructor call |
switch () { case: break; } | Case Of End ; | |
switch() { case: break; default: } | Case Of Else End | |
this | Self | |
try { } catch | Try except | |
try { } catch finally | Try Finally | |
unsafe | ||
virtual | Virtual | |
void | Procedure | |
volatile | ||
while | While Do | |
Asm End; |
Types Comparison
C# type | Pascal type | Size (bits) | Range | |
---|---|---|---|---|
byte | Shortint | 8-bit | -128 .. 127 | |
ubyte | Byte | 8-bit | 0 .. 255 | |
short | SmallInt | 16-bit | -32768 .. 32767 | |
ushort | Word | 16-bit | 0 .. 65535 | |
int | LongInt | 32-bit | -2147483648..2147483647 | |
uint | LongWord | 32-bit | 0..4294967295 | |
long | Int64 | 64-bit | -9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807 | |
ulong | QWord | 64-bit | 0 .. 18 446 744 073 709 551 615 | |
float | Single | 32-bit | 1.5E-45 .. 3.4E+38 | |
double | Double | 64-bit | 5.0E-324 .. 1.7E+308 | |
bool | Boolean | False True | ||
char | WideChar | 16-bit | ||
string | String | |||
datetime | TDateTime |
C# Language Features Not available in Pascal
- automatic memory management while - not available, except for reference counted types: strings (except for shortstrings), dynamic arrays
- lambda functions
- serialization (as syntax language) - you'd need to use explicit functions/procedures to convert to/from data structures
- LINQ
FPC Language Features not available in C #
- Assembler, Assembly language
- Multi-Platform Support
- Case-insensitive