Необходимо объявить тело, потому что оно не помечено как абстрактное, внешнее или частичное - PullRequest
4 голосов
/ 28 июля 2010

Я создал следующий класс.Однако я не могу обойти ошибку:

Необходимо объявить тело, поскольку оно не помечено как абстрактное, внешнее или частичное

Классификация следующая:

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 ]

8 голосов
/ 28 июля 2010

Вы объявили конструктор без тела:

public ObjectComparer(string compareField, string direction);

Если вы не хотите, чтобы конструктор что-либо делал, вы все равно можете поместить туда пустое тело ({ }).

В качестве примечания, не имеет смысла иметь абстрактный класс с открытым конструктором - конструктор должен быть защищен , потому что конструктор может быть вызван только классами, производными от это все равно.

2 голосов
/ 28 июля 2010

Вам нужно добавить тело метода для

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.


Я не хочу быть грубым, но просто обойти эту ошибку не заставит этот класс работать. Вы действительно должны понимать, что вы пытаетесь сделать, и как такой класс может вам помочь. (Если вы знаете все это и просто не поняли ошибку, то я прошу прощения)

...