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

Ric*_*ano 4 c# abstract-class 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);
        }
}
Run Code Online (Sandbox Code Playgroud)

有人能指出错误我的道,也给我一个简要的解释,以什么我做错了,为什么它抛出这个错误?

Mar*_*off 8

您已声明没有正文的构造函数:

public ObjectComparer(string compareField, string direction);
Run Code Online (Sandbox Code Playgroud)

如果你不想让构造函数做任何事情,你仍然可以{ }在那里放置一个空体().

作为旁注,具有公共构造函数的抽象类没有意义 - 构造函数应该受到保护,因为构造函数只能由从它派生的类"调用".


Mar*_*ris 2

您需要添加一个方法体

public ObjectComparer(string compareField, string direction);
Run Code Online (Sandbox Code Playgroud)

我建议您对抽象类进行一些研究。MSDN是一个很好的起点,但是快速的 Google 搜索将为您找到许多深入信息的来源。


既然问题已经得到合理的回答,我将添加一些额外的注释,因为您给出的代码看起来很糟糕。

using System.Web;
using System.Runtime.CompilerServices;
Run Code Online (Sandbox Code Playgroud)

这些似乎是在比较器中使用的奇怪的命名空间(尤其是第二个),这个类是否来自较大的文件,而您还没有获得全部内容,或者它只是遗留下来的遗留代码?


public ObjectComparer(string compareField, string direction);
Run Code Online (Sandbox Code Playgroud)

我猜构造函数应该设置这样的属性?

public ObjectComparer(string compareField, string direction)
{
    CompareField = compareField;
    Direction = direction;
}
Run Code Online (Sandbox Code Playgroud)
public string Direction
{ 
    get { return compareField; } 
    set { compareField = value;} 
}
Run Code Online (Sandbox Code Playgroud)

我认为这应该有它自己的支持领域。看起来很奇怪,它总是与 CompareField 相同。


我并不是有意无礼,但仅仅克服这个错误并不能让这门课成功。您确实需要了解您正在尝试做什么以及这样的课程如何帮助您做到这一点。(如果你知道这一切但只是不明白这个错误,那么我深表歉意)