我已经根据给我的文档创建了这个接口。(我需要使用第三方API进行数据库日志记录)。我希望返回getLogger()方法的对象类型“Logger”和getDatabaseMgr方法的对象类型“DatabaseMgr”。然而,这些都是抽象类。文档没有指定该方法做什么,他们只是写了{...}。
如果我不能创建这些类的示例,那么我如何返回它们?
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)
{
}
}
}
4条答案
按热度按时间3bygqnnd1#
“abstract”这个词意味着你不能创建这个类的示例。你可以创建另一个继承自抽象类的类,并从子类(非抽象类)创建示例。
yzxexxkh2#
抽象类必须在派生类中实现:
MyLoggerImpl
是抽象Logger
的派生类,可以选择使用MyLoggerImpl
和sealed
修饰符来防止其他类继承:现在在另一个类
MyLogger
中创建MyLoggerImpl
的示例:我更倾向于将debug()
创建为static
,这样无论创建了多少个类的示例,static
成员都只存在一个副本,也避免了从不同的代码模块多次创建MyLogger
的示例,而可以调用MyLogger.debug("Some message.")
:MSDN参考是here:
控制台应用程序中的示例用法:
vulvrdjw3#
抽象类是用来作为默认的行为提供者,而不是用来示例化的。所以你需要从抽象类中继承,得到氏族的默认行为,然后用特定的行为和状态扩展你继承的类。
在你的例子中,你需要创建一个父抽象类的引用,示例化你自己的继承类,并把它赋值给上面创建的引用。现在你可以返回这个抽象类引用了。
xkftehaa4#
对于.NET Core 3.1,您可以使用
System.Reflection
将构造函数添加到记录器:
使用反射获取示例:
来源:https://github.com/FORzzMOK/Creating-an-abstract-class