当前位置:  开发笔记 > 编程语言 > 正文

有没有办法扩展内置类型来继承接口?

如何解决《有没有办法扩展内置类型来继承接口?》经验,为你挑选了0个好方法。

我想为一些内置类型添加一个接口.我有一个接口,IConcludable我用它作为约束Conclusion.我不知道如何处理这个问题,或者它是否可能.

基本布局

public interface IConcludable { }

public struct Conclusion where T : IConcludable
{
    public bool IsSuccessful;
    public T Result;

    // Constructors, members, etc.
}

public class ErrorReport : IConcludable { ... }

public class MathArg : IConcludable { ... }

public class ParseResult : IConcludable { ... }

履行

public Conclusion ParseInput (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 Conclusion Validator(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如果它是一个数字,则返回该对象.如果它是另一种类型的函数,它返回一个的一部分stringbool或其他类型的,它被转换成一个不同类型的类.在数值计算结束时,返回将类似于ConclusionConclusion.因此增加intdoubleIConcludable接口就是我要做的.

更好地解释应用程序

我正在编写一个C#控制台应用程序.它接受用户的输入,并写下答案.输入类似于Excel公式:Sum(5, 15, Average(2, 3), 5)Concatenate("5 + 5 = ", Text(Sum(5, 5))).输入字符串经过验证,解析并返回结果.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有