2016-03-01 104 views
3

有一種方法可以在Java中像C#一樣在C#中初始化實現一個抽象方法嗎?實現初始化實例的抽象方法

public static abstract class A 
{ 
    public abstract String GetMsg(); 

    public void Print() 
    { 
     System.out.println(GetMsg()); 
    } 
} 

public static void main(String[] args) 
{ 
    A a = new A() 
    { 
     @Override 
     public String GetMsg() 
     { 
      return "Hello"; 
     } 
    }; 

    a.Print(); 
} 

回答

7

不,你不能 - 但你可以通過使用Func<string>達到同樣的目的:

using System; 

namespace Demo 
{ 
    public sealed class A 
    { 
     public Func<string> GetMsg { get; } 

     public A(Func<string> getMsg) 
     { 
      GetMsg = getMsg; 
     } 

     public void Print() 
     { 
      Console.WriteLine(GetMsg()); 
     } 
    } 

    public static class Program 
    { 
     public static void Main() 
     { 
      var a = new A(() => "Hello"); 
      a.Print(); 
     } 
    } 
} 

另外,如果你希望能夠初始化後的GetMsg屬性更改:

using System; 

namespace Demo 
{ 
    public sealed class A 
    { 
     public Func<string> GetMsg { get; set; } =() => "Default"; 

     public void Print() 
     { 
      Console.WriteLine(GetMsg()); 
     } 
    } 

    public static class Program 
    { 
     public static void Main() 
     { 
      var a = new A(){ GetMsg =() => "Hello" }; 
      a.Print(); 
     } 
    } 
} 

(這使用c#6語法 - 對於早期版本,您必須稍微修改它。)

+0

謝謝你的幫助 – alex