2011-08-25 3 views
5

1) 다음 코드가 다른 이유는 무엇입니까?Java와 C#이 다른 이유는 무엇입니까?

C 번호 :

class Base 
{ 
    public void foo() 
    { 
    System.Console.WriteLine("base"); 
    } 
} 

class Derived : Base 
{ 
    static void Main(string[] args) 
    { 
    Base b = new Base(); 
    b.foo(); 
    b = new Derived(); 
    b.foo(); 
    } 
    public new void foo() 
    { 
    System.Console.WriteLine("derived"); 
    } 
} 

자바 :

class Base { 
    public void foo() { 
    System.out.println("Base"); 
    } 
} 

class Derived extends Base { 
    public void foo() { 
    System.out.println("Derived"); 
    } 

    public static void main(String []s) { 
    Base b = new Base(); 
    b.foo(); 
    b = new Derived(); 
    b.foo(); 
    } 
} 

2) 우리는 원활한 전환을 보장하기 위해 필요한 일을 어떤 한 언어에서 다른 언어로 마이그레이션 할 때.

+5

정확하게 귀하의 질문에 무엇입니까? 동일한 언어가 아니기 때문에 코드가 다릅니다. 이 대답이 충분하지 않습니까? – RoflcoptrException

+0

이 질문은 숙제와 어떻게 다른가요? – Filburt

+0

@ Filburt : 답변을 참조하십시오. 그건 숙제가 아니야. –

답변

9

Java에서 메소드는 기본적으로 virtual입니다. C#에서는 가상 메서드가 명시 적으로 표시되어야합니다.
다음 C# 코드는 자바 코드에 해당 - 파생 클래스에서 기본 클래스와 override에서 virtual의 사용을 참고 : 게시

class Base 
{ 
    public virtual void foo() 
    { 
     System.Console.WriteLine("base"); 
    } 
} 

class Derived 
    : Base 
{ 
    static void Main(string[] args) 
    { 
     Base b = new Base(); 
     b.foo(); 
     b = new Derived(); 
     b.foo(); 

    } 

    public override void foo() 
    { 
     System.Console.WriteLine("derived"); 
    } 
} 

C# 코드는 클래스 Derived의 방법 foo을 숨 깁니다. 이것은 상속에 문제를 일으킬 수 있기 때문에 일반적으로 원하지 않는 것입니다. 당신이 게시 된 클래스를 사용

, 다음 코드를 출력 다른 것, 항상 같은 인스턴스 비록 :

Base b = new Derived(); 
b.foo(); // writes "base" 
((Derived)b).foo(); // writes "derived" 

내가 두 경우 모두에서 "파생"가 출력 이상으로 제공하는 고정 코드입니다.

7

C# 코드는 메서드를 숨기고 있기 때문에 경고와 함께 컴파일됩니다.

Java에서 클래스 메서드는 항상 가상이지만 C#에서는 그렇지 않습니다. 따라서 명시 적으로 '가상'으로 표시해야합니다.

C#에서

, 당신은이 작업을 수행해야합니다 :

public class Base 
{ 
    public virtual void Foo() 
    { 
     Console.WriteLine ("Base"); 
    } 
} 

public class Derived : Base 
{ 
    public override void Foo() 
    { 
     Console.WriteLine ("Derived."); 
    } 
} 
관련 문제