C# - 实现接口

时间:2011-10-03 17:39:00

标签: c# class inheritance interface

我有一项任务,我需要在我的多项式类中实现一个接口(IOrder)。 IOrder的目的是将多项式的前节点与另一个多项式进行比较,如果一个是< =则返回一个布尔值。

这是IOrder接口的初始化:

 //Definition for IOrder Interface
        public interface IOrder
        {
            // Declare an interface that takes in an object and returns a boolean value
            // This method will be used to compare two objects and determine if the degree (exponent) of one is <= to the other.
            bool Order(Object obj);

        }

以下是我的多项式类的基础知识:

        //Definition for Polynomial Class
        public class Polynomial : IOrder
        {
            //this class will be used to create a Polynomial, using the Term and Node objects defined previously within this application
            //////////////////////////////////
            //Class Data Members/
            //////////////////////////////////
            private Node<Term> front;  //this object will be used to represent the front of the Polynomial(Linked List of Terms/Mononomials) - (used later in the application)

            //////////////////////////////////
            //Implemention of the Interfaces
            //////////////////////////////////
            public bool Order(Object obj) //: IOrder where obj : Polynomial 
            {
                // I know i was so close to getting this implemented propertly
                // For some reason the application did not want me to downcast the Object into a byte

               // //This method will compare two Polynomials by their front Term Exponent
               // //It will return true if .this is less or equal to the given Polynomial's front node.
               if (this.front.Item.Exponent <= obj is byte)
               {
                   return true;
               }

            }
            //////////////////////////////////
            //Class Constructor
            //////////////////////////////////   
            public Polynomial()
            {
                //set the front Node of the Polynomial to null by default
                front = null;
            }
            //////////////////////////////////

我遇到的问题是在多项式类中实现Order接口。为了澄清,每个多项式都有一个前节点,一个节点是一个Term(Coefficient double,Exponent byte),还有一个next类型的Node,用于链接多项式的Term。然后将多项式添加到多项式对象中。 IOrder用于根据前项的指数值对列表中的多项式进行排序。我想我必须在方法中向下转换Object obj,以便设置它,以便我可以将“.this”多项式的指数与提供给方法的多项式的Exponent值进行比较。

正确地投射这些值的任何见解都会很棒。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您的Order功能是否需要object?如果您总是期望将byte传递给函数(并且您不想支持除byte之外的任何内容),那么您应该将参数改为byte

要回答您的具体问题,is运算符会检查值的类型;它不执行任何铸造。你需要像这样投射:

if (this.front.Item.Exponent <= (byte)obj)
{
    return true;
}

但是如果你按照上面的建议,你的界面中会有一个如下所示的函数定义:

bool Order(byte exponent);

(请注意,我将其命名为exponent。为参数和变量赋予有意义的名称,而不是像“obj”这样的内容。

然后像这样实现:

public bool Order(byte exponent)
{
    if (this.front.Item.Exponent <= exponent)
    {
        return true;
    }
    else
    {
        return false;
    }
}

如果需要,可以通过删除整个if块来简化代码。由于if中的表达式必须求值为布尔值,并且这是函数返回的值,因此您应该能够将函数的整个主体简化为单个语句。

答案 1 :(得分:0)

为什么不:

public bool Order(Object obj)
{
    if ( (obj is byte) && (this.front.Item.Exponent <= (byte) obj) )
    {
        return(true);
    }
    return(false);
}