C#:IComparable实现私有
我是C#新手,所以这可能是一个非常糟糕的问题:我在类中实现了IComparable,并想用NUnit测试它。但是CompareTo方法被标记为私有,因此无法从测试中访问。C#:IComparable实现私有,c#,nunit,icomparable,C#,Nunit,Icomparable,我是C#新手,所以这可能是一个非常糟糕的问题:我在类中实现了IComparable,并想用NUnit测试它。但是CompareTo方法被标记为私有,因此无法从测试中访问。 发生这种情况的原因是什么?我该如何解决? 可比性: public class PersonHistoryItem : DateEntity,IComparable { ... int IComparable.CompareTo(object obj) {
发生这种情况的原因是什么?我该如何解决?
可比性:
public class PersonHistoryItem : DateEntity,IComparable
{
...
int IComparable.CompareTo(object obj)
{
PersonHistoryItem phi = (PersonHistoryItem)obj;
return this.StartDate.CompareTo(phi.StartDate);
}
}
测试:
[TestMethod]
public void TestPersonHistoryItem() {
DateTime startDate = new DateTime(2001, 2, 2);
DateTime endDate = new DateTime(2010, 2, 2);
PersonHistoryItem phi1 = new PersonHistoryItem(startDate,endDate);
PersonHistoryItem phi2 = new PersonHistoryItem(startDate, endDate);
Assert.IsTrue(phi1.CompareTo(phi2)==0);
}
它们不是私人的,只是私人的。将变量声明为
IComparable
可以解决以下问题:
var p1 = (IComparable)phi1;
var p2 = (IComparable)phi2;
Assert.IsTrue(p1.CompareTo(p2) == 0);
他们不是私人的,他们只是。将变量声明为
IComparable
可以解决以下问题:
var p1 = (IComparable)phi1;
var p2 = (IComparable)phi2;
Assert.IsTrue(p1.CompareTo(p2) == 0);
在C#中,接口不定义访问器,因此您可以将比较设置为
公共方法,并将显式接口实现更改为:
public int CompareTo(object obj)
致:
在C#中,接口不定义访问器,因此您可以将比较设置为
公共方法,并将显式接口实现更改为:
public int CompareTo(object obj)
致:
您的方法使用显式接口实现。这意味着除非完成转换,否则接口方法将不会显示在类上。
这样做:
((IComparable)phi1)。与(phi2)相比,您的方法使用显式接口实现。这意味着除非完成转换,否则接口方法将不会显示在类上。
执行此操作:((IComparable)phi1).CompareTo(phi2)
这里的主要问题是显式实现了CompareTo方法,该方法仅允许在将对象用作IComparable对象时使用它
要更正此问题,请将可见性指定为public并实现CompareTo方法,而不是“显式”:
这里的主要问题是显式实现了CompareTo方法,该方法仅允许在将对象用作IComparable对象时使用它
要更正此问题,请将可见性指定为public并实现CompareTo方法,而不是“显式”:
我认为最简单的方法是使用隐式接口实现:
我认为最简单的方法是使用隐式接口实现:
谢谢,但是我不能在那里声明我的变量是可比较的。所以根据你的回答,我想另一个选择是隐式实现它们。我该怎么做呢?您也可以在assert语句中强制转换它们:assert.IsTrue(((IComparable)phi1.CompareTo((IComparable)phi2))代码>谢谢,但是我不能在那里声明我的变量为IComparable。所以根据你的回答,我想另一个选择是隐式实现它们。我该怎么做呢?您也可以在assert语句中强制转换它们:assert.IsTrue(((IComparable)phi1.CompareTo((IComparable)phi2))代码>
public class PersonHistoryItem : DateEntity,IComparable
{
...
public int CompareTo(object obj)
{
PersonHistoryItem phi = (PersonHistoryItem)obj;
return this.StartDate.CompareTo(phi.StartDate);
}
}
public class PersonHistoryItem : DateEntity, IComparable
{
...
public int CompareTo(object obj)
{
PersonHistoryItem phi = (PersonHistoryItem)obj;
return this.StartDate.CompareTo(phi.StartDate);
}
}