我有一项任务,我需要在我的多项式类中实现一个接口(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值进行比较。
正确地投射这些值的任何见解都会很棒。 提前谢谢。
答案 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);
}