我创建了以下类。但是,我无法克服错误:
必须声明一个主体,因为它没有标记为抽象,外部或部分
classe如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.CompilerServices;
namespace VDSORDAL
{
public abstract class ObjectComparer<T> : IComparer<T>
{
public ObjectComparer(string compareField, string direction);
private string compareField;
public string CompareField
{
get { return compareField; }
set { compareField = value; }
}
public string Direction
{
get { return compareField; }
set { compareField = value;}
}
public abstract int Compare(T x, T y);
}
}
有人可以用我的方式指出错误,并简要解释一下我做错了什么以及为什么会抛出这个错误?
答案 0 :(得分:8)
您已声明构造函数没有正文:
public ObjectComparer(string compareField, string direction);
如果您不希望构造函数执行任何操作,您仍然可以在其中放置一个空体({ }
)。
作为旁注,使用公共构造函数 - the constructor should be protected的抽象类是没有意义的,因为构造函数只能由从它派生的类“调用”。
答案 1 :(得分:2)
您需要为
添加方法体public ObjectComparer(string compareField, string direction);
我建议您对抽象类进行一些研究。 MSDN是一个很好的起点,但快速的Google搜索会为您找到许多深度信息来源。
由于问题得到合理回答,我会添加一些额外的评论,因为你给出的代码看起来很破碎。
using System.Web;
using System.Runtime.CompilerServices;
这些似乎是在比较器中使用的奇怪的名称空间(特别是第二个),这个类是来自一个更大的文件而你还没有得到所有这些,还是只留下遗留代码?
public ObjectComparer(string compareField, string direction);
我猜测构造函数应该设置像这样的属性吗?
public ObjectComparer(string compareField, string direction)
{
CompareField = compareField;
Direction = direction;
}
public string Direction
{
get { return compareField; }
set { compareField = value;}
}
我认为这应该有它自己的支持领域。似乎很奇怪它总是与CompareField相同。
我不是故意粗鲁,但只是越过那个错误不会使这个班级工作。你真的需要了解你想要做什么,以及这样的课程如何帮助你做到这一点。 (如果你知道这一切,只是不理解错误,那么我道歉)