我想为一些内置类型添加一个接口.我有一个接口,IConcludable
我用它作为约束Conclusion
.我不知道如何处理这个问题,或者它是否可能.
基本布局
public interface IConcludable { } public struct Conclusionwhere T : IConcludable { public bool IsSuccessful; public T Result; // Constructors, members, etc. } public class ErrorReport : IConcludable { ... } public class MathArg : IConcludable { ... } public class ParseResult : IConcludable { ... }
履行
public ConclusionParseInput (string input) { // Parse input... // Initialize ParseResult object... return new Conclusion (result); }
问题
当我得到的终值,它就像一个内置式int
,double
,string
,bool
,等我想用Conclusion
作为回报,因为我有一个处理错误报告时输入的字符串是无效的类:
if (conclusion.ReturnObject is ErrorReport) { ErrorManager errorManager = new ErrorManager(); errorManager.Resolve(conclusion); }
研究
我调查了约束.
"实数"类型是否存在C#泛型约束?[重复]
似乎约束只是加在一起,所以包括我需要的每个内置类型的接口需要定义Conclusion
一大堆与我的struct 没有任何关系的方法.
扩展方法
如何扩展C#内置类型,比如String?
这些实际上改变了内置类型的行为.这不是我想要的,因为我的界面,IConcludable
没有任何方法.
替换内置类型
覆盖.NET类中内置的
不可能.我不需要改变这些类型的行为.我只是想为它添加一个空接口.
似乎没有任何关于向内置类型添加接口的信息.我不确定"继承"是否会被引用.这可能吗?
编辑
结论结构的更好解释
我在大多数方法中使用结论struct作为返回对象.这是因为我正在使用代表.请参阅以下对象的实际代码:
public delegate ConclusionValidator (T subclass) where T : IVerifiable ; public delegate Conclusion Executor(BaseFunction subclass); public struct Conclusion where T : IConcludable { public bool IsSuccessful; public T ReturnObject; public Conclusion(T returnObject) { this.ReturnObject = returnObject; this.IsSuccessful = returnObject is Error ? false : true; } } public class BaseFunction : IVerifiable , IConcludable { public List Args; public Executor Executing; public Validator Validating; public string UserInput; public Conclusion Validate(BaseFunction subclass) { if (this.Validating != null) { return Validating(subclass); } else { StringBuilder message = new StringBuilder(); message.Append("A Validating delegate has not been assigned."); throw new InvalidOperationException(message.ToString()); } } public Conclusion Execute(BaseFunction subclass) { if (this.Executing != null) { return this.Executing(subclass); } else { StringBuilder message = new StringBuilder(); message.Append("An Executing delegate has not been assigned."); throw new InvalidOperationException(message.ToString()); } } } public class Function : BaseFunction { public T Result; public Function() { base.Args = new List (); } } public class BaseArgument : IVerifiable , IConcludable { public string Role; public string UserInput; public int Position; public Validator Validating; public Conclusion Validate(BaseArgument subclass) { if (this.Validating != null) { return Validating(subclass); } else throw new InvalidOperationException(); } } public class Argument : BaseArgument { public T Value; public Argument(int position) { base.Position = position; } } public static class ExecutionHandler { public static Conclusion Sum(BaseFunction subclass) { subclass = (Function )subclass; // Execution code. return new Conclusion (subclass); } public static Conclusion Concatenate(BaseFunction subclass) { subclass = (Function )subclass; // Execution code. return new Conclusion (subclass); } }
如果我需要发布更多,我会.但看起来真的很多.我使用的所有委托分配的方法的返回类型具有返回类型,Conclusion
以便我可以有一个返回对象以及一个错误(如果发生).上面代码中的函数返回Conclusion
,但Addend
如果它是一个数字,则返回该对象.如果它是另一种类型的函数,它返回一个的一部分string
或bool
或其他类型的,它被转换成一个不同类型的类.在数值计算结束时,返回将类似于Conclusion
或Conclusion
.因此增加int
和double
对IConcludable
接口就是我要做的.
更好地解释应用程序
我正在编写一个C#控制台应用程序.它接受用户的输入,并写下答案.输入类似于Excel公式:Sum(5, 15, Average(2, 3), 5)
或Concatenate("5 + 5 = ", Text(Sum(5, 5)))
.输入字符串经过验证,解析并返回结果.