2015-12-23 143 views
1

我已經根據提供給我的文檔創建了此接口。 (我需要使用第三方API進行數據庫記錄)。 我期望爲getDatabaseMgr方法的getLogger()方法和對象類型「DatabaseMgr」返回對象類型「Logger」。但是,這些是抽象類。文檔沒有具體說明該方法的用途,他們只是寫了{...}。無法在接口方法中創建抽象類的實例

如果我無法創建這些類的實例,那我該如何返回它們?

using System; 
using System.Data.Common; 

namespace com.XXXXXXXXXX.api 
{ 
    public class ApiFactory 
    { 
     public static ApiFactory getInstance() { 
      return new ApiFactory(); 
     } 


     public Logger getLogger(String Id, Type type) 
     { 
     } 

     public DatabaseMgr getDatabaseMgr(String Id) 
     { 
     } 

    } 
    public abstract class Logger 
    { 
     public String Id { get; set; } 
     public abstract void trace(String message); 
     public abstract void debug(String message); 
     public abstract void info(String message); 
     public abstract void warn(String message); 
     public abstract void error(String message); 
     public abstract void alert(String message); 
     public abstract bool isTraceEnabled { get; } 
     public abstract bool isDebugEnabled { get; } 
     public abstract bool isInfoEnabled { get; } 
     public abstract bool isWarnEnabled { get; } 
     public abstract bool isErrorEnabled { get; } 
    } 
    public abstract class DatabaseMgr 
    { 
     public String Id { get; set; } 

     protected DatabaseMgr(String Id) 
     { 
     } 

    } 
} 
+2

如果他們沒有提供抽象類的具體實現,那麼你總是可以創建自己的實例並返回它們的實例。 –

+0

首先,您必須創建兩個分別從'Logger'和'DatabaseMgr'派生的非抽象類,然後返回這些新創建的類的對象。 – Marshal

回答

7

「抽象」一詞表示您無法創建此類的實例。 您可以創建另一個繼承自抽象類的類並從子類(非抽象)類創建實例。

2

你的抽象類必須在派生類中實現:

public abstract class Logger 
{ 
    public abstract void debug(String message); 
    //Other properties and methods 
} 

MyLoggerImpl是派生類的抽象Logger,選擇應用MyLoggerImplsealed改性劑,以防止繼承其他類:

public sealed class MyLoggerImpl : Logger 
{ 
    public override void debug(string message) 
    { 
     //Write log 
     //Trace.WriteLine(message); 
    } 
} 

現在在另一個類中創建MyLoggerImpl的實例MyLogger:我寧願創建debug()作爲static,因此只有一個static成員的副本存在,不管如何被創建的類的實例,也避免了創建MyLogger從不同的代碼模塊幾倍的情況下,而不是MyLogger.debug("Some message.")可以稱爲:

參考MSDN是here

static void Main(string[] args) 
{ 
    MyLogger.debug("Some message."); 
} 
0

抽象類主要是想作爲默認行爲提供商:從控制檯應用程序

使用示例nd不用於實例化。所以你需要從抽象類繼承獲得部落的deafult行爲,然後用特定的行爲和狀態擴展你的繼承類。

在你的情況下,你需要創建一個父抽象類的引用,並實例化你自己的繼承類並將其分配給上面創建的引用。現在你可以返回這個抽象類的引用。

相關問題