c# - 从单例实例获取设置为空
问题描述
我目前正在编写一个 api,该 api 是我想用 C# 编写的 ac ++ 插件,该 api 实际上几乎完成了,只是我现在有一个问题让我烦恼了几个小时
问题如下
// this class is in the api dll file
public class SingleData
{
public static Lazy<SingleData> val = new Lazy<SingleData>(() => new IPlugin());
public static IPlugin Instance { get { return val.Value; } }
protected SingleData() { }
public string Author { get; set; }
public string Name { get; set; }
public virtual void plugin_getUser(UserData user) { }
}
// this class is also in the api dll file
public class DllExport {
[DllExport] public static void plugin_getUser(UserData user) { return SingleData.Instance.plugin_getUser(user); }
}
// this is NOT in the dll file
// I want that people who use my API only make it like this
public class Main : SingleData {
public Main() {
Author = "Hans";
Name = "test plugin";
}
public override void plugin_getUser(UserData user) {
Console.WriteLine(user.OnlineTime);
}
}
所以现在的问题是如果我删除了不能return SingleData.Instance.plugin_getUser
在 DllExport 类中使用的单例并且Author
andName
变量为空。
我现在有一些问题,如何在 Main 类中花费事件而无需输入return SingleData.instance.plugin_getUser
DllExport 类
另一个问题是,我怎么能做得不同,但主类应该和我指定的一样
解决方案
我认为这可能是您可能想要考虑奇怪的重复模式的情况,
public class SingleData<T> where T : SingleData<T>, new()
{
public static Lazy<T> val = new Lazy<T>(() => new T());
public static IPlugin Instance { get { return val.Value; } }
protected SingleData() { }
public string Author { get; set; }
public string Name { get; set; }
public virtual void plugin_getUser(UserData user) { }
}
// this class is also in the api dll file
public class DllExport
{
[DllExport]
public static void plugin_getUser(UserData user) { return SingleData<Main>.Instance.plugin_getUser(user); }
}
用法,
public class Main : SingleData<Main>
{
public Main()
{
Author = "Hans";
Name = "test plugin";
}
public override void plugin_getUser(UserData user)
{
Console.WriteLine(user.OnlineTime);
}
}
推荐阅读
- laravel - 如何更改 yajra 数据表中行索引(DT_RowIndex)的值
- c# - 在我的记忆卡游戏中上传时,如何让精灵图像保持不变?
- c# - ListView 未在 Xamarin 表单中完全显示
- discord.py - 如何在相同的味精中制作图像
- javascript - 验证数据的“功能”出现问题
- c# - 为什么在一个特定场景中,我的 Pin 图只显示在 Bing 地图上?
- python - ValueError:激活不是合法参数
- hadoop - 如何让 Hadoop 命令 ./start-all.sh 在终端中执行
- azure - 如何记录 kusto 查询以在一个时间图中可视化多个维度?
- javascript - 为什么这个 CSS 中的内部 div 是从父 div 出来的?