c# -实现一个接口
本文关键字:一个 接口 实现 | 更新日期: 2023-09-27 18:10:24
我有一个分配,我需要在我的多项式类中实现一个接口(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接口的实现。为了澄清,每个多项式都有一个前节点,节点是一个术语(系数双精度,指数字节),也是一个类型为next的节点,用于连接多项式的术语。然后将多项式添加到多项式对象中。IOrder将用于根据前面Term的指数值对列表中的多项式进行排序。我认为我必须在方法中向下cast对象对象,以便设置它,以便我可以比较指数。这个"多项式的指数值提供给该方法。
如果能正确地设置这些值,那就太棒了。
是否有原因,您的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
中的表达式必须求值为布尔值,这就是函数返回的值,因此您应该能够将整个函数体减少为单个语句。
为什么不呢:
public bool Order(Object obj)
{
if ( (obj is byte) && (this.front.Item.Exponent <= (byte) obj) )
{
return(true);
}
return(false);
}