c# - 如何告诉一个类它应该创建哪些对象?类型与对象混淆:(
问题描述
我有一个想要(以某种方式)处理规则的类(SetOfRules)。任务:创建这个类的新实例(这很容易),然后将规则(定义在类Rules 和派生类中)添加到实例中。
问题 1:我不想实例化所有规则,然后将它们作为对象传递给 SetOfRules 的 Add-method,但我想将类名称(类型)列表传递给 Add-method。我怎么做?那么在 SetOfRules 中实例化这样一个对象的语法是怎样的呢?
问题2:类规则和派生类不包含任何属性。它们只是转换方法的集合。我是否必须将它们实例化为 SetOfRules 类中的一个对象,或者我可以将它们称为静态类的方法(我不能使用静态类,因为我在 Rule 类上使用继承来确保每个规则类都实现了需要)
这是我现在遇到的一些(伪)代码:
public class Rule
{
virtual void transform( myObject ob)
{
...
}
}
public class SpecificRule1 : Rule
{
...
}
public class SpecificRule2 : Rule
{
...
}
public class SetOfRules
{
public AddRules( ???? ListOfRuleTypes)
{
}
}
在其他地方我想做类似的事情:
SetOfRules easyRules = new SetOfRules();
easyRules.Add( new ??RuleTypes??[] { "SpecificRule2", "SpecificRule13", "SpecificRule22" });
感谢您的酷提示!
解决方案
看起来您想要一个带有合同的单例类:
public interface IRule
{
void Transform(object o);
}
public abstract class SingletonBase<T> where T : SingletonBase<T>, new()
{
public static T Instance { get; } = new T();
}
public class SpecificRule1 : SingletonBase<SpecificRule1>, IRule
{
public void Transform(object o) => throw new NotImplementedException();
}
public class SpecificRule2 : SingletonBase<SpecificRule2>, IRule
{
public void Transform(object o) => throw new NotImplementedException();
}
public class RuleSet : List<IRule>
{
public void Add<TRule>() where TRule : SingletonBase<TRule>, IRule, new()
{
this.Add(SingletonBase<TRule>.Instance);
}
}
您可以通过各种方式添加规则:
var rules = new RuleSet
{
SpecificRule1.Instance,
SpecificRule2.Instance,
};
rules = new RuleSet();
rules.Add(SpecificRule1.Instance);
rules.Add<SpecificRule2>();
推荐阅读
- android - 科特林。接口作为参数
- android - Genymotion Translation 已安装,但 apk 仍未安装(该应用程序在 windows 模拟器中运行,因此它可能不是用 amd64 编写的)
- wordpress - Wordpress 如何显示已登录用户已阅读帖子
- microsoft-graph-api - Microsoft Graph API 中的 getSharePointSiteUsageDetail 返回垃圾
- python - 更改熊猫默认“季度”的日期
- android - 如何通过蓝牙/DECT 重新路由 android 音频
- javascript - 用户单击时过滤选择选项下拉列表
- microsoft-graph-api - 如何使用 POSTMAN 或 Graph Explorer 获取 SharePoint 页面和页面内容?
- powerbi - 如何在 PowerBI 部署管道中添加“UAT”阶段?
- reactjs - 是否可以在 Play 商店中用 React Native 移动应用替换相同的移动 android 原生应用?