必须声明一个正文,因为它没有标记为抽象,外部或部分

时间:2010-07-28 16:11:30

标签: c# class abstract-class

我创建了以下类。但是,我无法克服错误:

  

必须声明一个主体,因为它没有标记为抽象,外部或部分

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);
        }
}

有人可以用我的方式指出错误,并简要解释一下我做错了什么以及为什么会抛出这个错误?

2 个答案:

答案 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相同。


我不是故意粗鲁,但只是越过那个错误不会使这个班级工作。你真的需要了解你想要做什么,以及这样的课程如何帮助你做到这一点。 (如果你知道这一切,只是不理解错误,那么我道歉)