C#とjava

14747 ワード

 
C#(C-Sharp) Microsoft      ,   “C/C++             ”。  ,           ,     C#   Java     ,   Microsoft    Java   。         ?

           ,C#   Java       。      Java   ,    C#        C#   ,            10          。

 、C#、C++ Java 
C#      Microsoft Anders Hejlsberg Scott Wiltamuth  。   Microsoft        , C# C++、Java           。     IT       ,       C#   Java   C++,          。             ,    1        。  ,     :Java C#       , C#          Java   C++。


 1:  C#、C++ Java       
   C# C++ Java 
          ,                         ,         
       “interface”            “interface”    
             ,                       ,        
     ,                 。            ,        。      。     。 
          .NET    (IL)           
              
                   。 

   1           ,       ,  C# Java       。

 、        
2.1、       
      (Primitive) C#      ,C#           Java 。  ,C# unit,      。 2     C#        :


 2:C#      
      
object             
string      ;      Unicode      
sbyte 8       
short 16       
int 32       
long 64       
byte 8       
ushort 16       
uint 32       
ulong 64       
float          
double          
bool     ;bool    true,   false 
char     ;  char     Unicode   
decimal  28              

2.2、   
  Java  static final   。 C# ,     const     。


public const int x = 55; 

  ,C#        readonly   。               ,     readonly   。readonly                  。

2.3、        
 Java ,            main       。main      String    ,      。 C# ,main           Main(   M),Main         String    ,        ,          :


public static void Main(String[] args) 

  ,C# Main       。    Main        ,       Main         ,          。    ,   Main            :


public static void Main() 

  ,          ,Main         int。  ,      Main    1:


using System;
public class Hello {
public static int Main() {
Console.WriteLine("Done");
return 1;
}
} 

    , Java   main       。

2.4、switch   
 Java ,switch        。 C#  switch    ,          。      switch          C#  :


using System;
public class Hello {
public static void Main(String[] args) {
switch (args[0]) {
case "  ":
Console.WriteLine("   !          !");
break;
case "  ":
Console.WriteLine("   !        !");
break;
default:
Console.WriteLine("   !    !");
break;
}
}
} 

 Java  switch  ,C# switch       case            break  ,   goto  switch    case  。

2.5、foreach   
foreach            ,                 。        。


using System;
public class Hello {
public static void Main(String[] args) {
foreach (String arg in args)
Console.WriteLine(arg);
}
}
 

                   ,  “Hello Peter Kevin Richard”,              :


Peter
Kevin
Richard 

2.6、C#  >>>      
C#  uint ulong          。  , C# ,     ( “>>”)                 (  int long)       。  uint ulong               ;   int long     ,“>>”       ,  ,          ,“>>”           ;  “>>”        ,          1。

Java            。  ,   “>>>”            ;  ,  “>>”   。

2.7、goto    
Java  goto   。 C# ,goto          。  ,C#          goto,      goto         。 Java ,            break continue  C#  goto。

2.8、     
 Java ,           ,                   。  ,           :


int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 }; 

  C# ,         ,[]          。

2.9、  
 C# , (Package)       。       C#       “using”。  ,“using System;”       System    。

  , Java    ,C#                    :


using TheConsole = System.Console;
public class Hello {
public static void Main() {
TheConsole.WriteLine("    ");
}
} 

       ,Java     .NET     。  ,         。 Java ,               ,      .java       。 C#                                    T # ,                   ,            。

.NET          (Assembly)。          manifest  。manifest           ,                  ,                            。        ,                 ,          。.NET          DLL        ,      DLL Hell  。

2.10、    
 Java ,java.lang      ,              。  ,            ,          :


System.out.println("Hello world from Java"); 

C#        。           ,   System    Console   WriteLine  。  ,           。    :


using System;
public class Hello {
public static void Main() {
Console.WriteLine("Hello world from C#");
}
} 

2.11、     
Java C#           。              ,             。


  :              ,          。              。 
      :    Java  C# ,             。  C# internal       ,            。 
   :Java C#             ,           。
2.12、     
                 。C#        Java      ,      internal。    ,C# 5        ,    :


public:           。 
protected:          。 
internal:               。 
protected internal:                 。 
private:             。
2.13、    
 Java ,      “extends”    。C#   C++      。  ,              Control       Button:


public class Button: Control { . . } 

2.14、    
  C#    final   ,            ,     sealed   ,     :


sealed class FinalClass { . . } 

2.15、   
       C# Java     。       interface,                  。    ,          “I”  。      C#       ,  Java        :


interface IShape { void Draw(); } 

                。  ,   IRectangularShape    IShape  ( , IShape     IRectangularShape  )。


interface IRectangularShape: IShape { int GetWidth(); } 

                 ,             ,        :


interface INewInterface: IParent1, IParent2 { } 

  , Java  ,C#         (Field)。

      , C# ,                。 Java ,        public   (       ),  C# ,          public       。  ,   C#           。


interface IShape { public void Draw(); } 

2.16、is as    
C#  is    Java  instanceof     ,                         。 Java    C#  as         。as    is       ,     “   ”:        ,as                      ;  ,         null。

     as   ,            is      。        IShape  ,       IShape    Rectangle Circle。


using System;
interface IShape {
void draw();
}
public class Rectangle: IShape {
public void draw() {
}
public int GetWidth() {
return 6;
}
}
public class Circle: IShape {
public void draw() {
}
public int GetRadius() {
return 5;
}
}
public class LetsDraw {
public static void Main(String[] args) {
IShape shape = null;
if (args[0] == "rectangle") {
shape = new Rectangle();
}
else if (args[0] == "circle") {
shape = new Circle();
}
if (shape is Rectangle) {
Rectangle rectangle = (Rectangle) shape;
Console.WriteLine("Width : " + rectangle.GetWidth());
}
if (shape is Circle) {
Circle circle = (Circle) shape;
Console.WriteLine("Radius : " + circle.GetRadius());
}
}
}
 

       ,      “rectangle”  “circle”  Main     。        “circle”, shape        Circle     ;  ,        “rectangle”, shape      Rectangle     。  ,   is     shape     :  shape     , shape     Rectangle  ,      GetWidth  ;  shape    , shape       Circle  ,      GetRadius  。

    as   ,             :


using System;
interface IShape {
void draw();
}
public class Rectangle: IShape {
public void draw() {
}
public int GetWidth() {
return 6;
}
}
public class Circle: IShape {
public void draw() {
}
public int GetRadius() {
return 5;
}
}
public class LetsDraw {
public static void Main(String[] args) {
IShape shape = null;
if (args[0] == "rectangle") {
shape = new Rectangle();
}
else if (args[0] == "circle") {
shape = new Circle();
}
Rectangle rectangle = shape as Rectangle;
if (rectangle != null) {
Console.WriteLine("Width : " + rectangle.GetWidth());
}
else {
Circle circle = shape as Circle;
if (circle != null)
Console.WriteLine("Radius : " + circle.GetRadius());
}
}
}
 

           ,       shape        ,  as    shape   Rectangle     。  shape     Rectangle, shape     Rectangle         rectangle  ,        GetWidth  。        ,          。   ,shape     Circle         circle  。  shape     Circle  , circle       Circle  ,      GetRadius  。

2.17、  
C#       。  ,C#   .NET   。  ,.NET         .NET  ,  VB.NET  JScript.NET。      StringBuilder ,   String    。StringBuilder  Java StringBuffer     。

2.18、     
C++                          。   C++        ,             。     ,        。Java             ,                    。C#         。   ,           OOP  ,                。C#     C++         ,               ,  Java       。

2.19、     
     C#   Java         ,        ,  ? C# ,           Exception    (      ?)  ,   Java   ,      try catch  。Exception   .NET System        。

 、Java      
C#   Java    ,  ,C#    Java(  )              。

3.1、    
    enum  (Enumerator,      ),           。    ,enum                       。  ,         Fruit(  )    ,              ,                       。


public class Demo {
public enum Fruit {
Apple, Banana, Cherry, Durian
}
public void Process(Fruit fruit) {
switch (fruit) {
case Fruit.Apple:
...
break;
case Fruit.Banana:
...
break;
case Fruit.Cherry:
...
break;
case Fruit.Durian:
...
break;
}
}
}
 

    Process   ,      int  myVar     ,  ,     Fruit  ,           Applet、Banana、Cherry Durian      。 int  ,enum      ,        。

3.2、   
  (Struct)     。  ,               ,         ,             。  ,      ,      。        ,          ,        。

  ,                  。    ,          ,                  ,      “   ”         。    ,             。

          。         ,     “struct”   “class”,        。


struct Point {
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
 

3.3、   
C#        (Field)  ,        (Property)。                  。           ――       、       。  ,      ,         ;  ,       (accessor),                       。  ,             、                 ,               。

 C# ,            。                  ,        set   /   get  。  ,       ,PropertyDemo      Prop  。


public class PropertyDemo {
private string prop;
public string Prop {
get {
return prop;
}
set {
prop = value;
}
}
}
 

              , PropertyDemo  Prop  ,      get set    。          ,get       ;         ,set       。 set     ,           value     。

            ,                。  ,           PropertyDemo ,    、    Prop  。


PropertyDemo pd = new PropertyDemo();
pd.Prop = "123"; // set
string s = pd.Prop; // get
 

3.4、                 
 Java ,                       ,           ―― ,                    。 C# ,                     。  ,                   ――    ,                 ,            。

 C#          ,    ref   。  ,            ,             16。  i     ProcessNumber         。


using System;
public class PassByReference {
public static void Main(String[] args) {
int i = 8;
ProcessNumber(ref i);
Console.WriteLine(i);
}
public static void ProcessNumber(ref int j) {
j = 16;
}
}
 

C#                    out,  ref  。  ,  out ,                      。    ,    i    ProcessNumber         ,      。   out   ref,               ,             。


using System;
public class PassByReference {
public static void Main(String[] args) {
int i;
ProcessNumber(out i);
Console.WriteLine(i);
}
public static void ProcessNumber(out int j) {
j = 16;
}
}
 

      ,  i     ProcessNumber         , PassByReference         。

3.5、C#      
                                    , C# ,                  “   ”          。C#     “   ”(unsafe)     ,            ,  “  ”                  。               ,   “   ”              。“   ”      unsafe        ,               “   ”   。  ,C#           ,   “   ”             。


using System;
class UsePointer {
unsafe static void PointerDemo(byte[] arr) {
.
.
}
}
 

C#  unsafe            :        ,             (  COM    DLL   C  )   。

3.6、   
  (delegate)    C++            。  ,         ,C#          、     、   。  ,              ,            ,         。           。                     ,                  。  ,               。

        System.Delegate       。             :  ,    ,  。   delegate      。  ,                         :


delegate void TheDelegate(); 

          :  new   ,           ,              。          ,                。

3.7、        
           ,          。       ,C#          。  ,C#           ,      。      ,                    ,                   。

 C#  .NET      ,  “  ”      (Boxing)     (Unboxing)  。                      。      (      )                   ,        。    value-type      :        ,   value-type        。

               ,              。           :                value-type         ,           。

Java             。Java                      。  , Integer   int  , Byte   byte  。

【   】       C# Java。        ,  , C# Java              。    、                。                 ,                   ,        C#       ?