Свойства c# в Абстрактных базовых классах

В целом:

В основном POST не является идемпотентной операцией . Таким образом, Вы не можете использовать его для кэширования. ДОБЕРИТЕСЬ должна быть идемпотентная операция, таким образом, это является наиболее часто используемым для кэширования.

посмотрите раздел 9.1 из , RFC 2616 S. 9.1 .

HTTP 1.1 Кроме ПОЛУЧАЕТ семантику метода:

сам метод THE POST семантически предназначен для регистрации чего-то на ресурс. POST не может кэшироваться, потому что, если Вы делаете что-то однажды по сравнению с дважды по сравнению с тремя разами, тогда Вы изменяете ресурс сервера каждый раз. Каждый запрос вопросы и должен быть поставлен серверу.

сам ПОМЕЩЕННЫЙ метод семантически предназначен, чтобы поместить или создать ресурс. Это - идемпотентная операция, но это не будет использоваться для кэширования, потому что УДАЛЕНИЕ, возможно, произошло тем временем.

сам УДАЛИТЬ метод семантически предназначен для удаления ресурса. Это - идемпотентная операция, но это не будет использоваться для кэширования, потому что ПОМЕЩЕННЫЙ, возможно, произошел тем временем.

Относительно клиентского кэширования:

веб-браузер А будет всегда передавать Ваш запрос, даже если он будет иметь ответ от предыдущей операции POST. Например, можно послать электронные письма с Gmail пара дней независимо. Они могут быть тем же предметом и телом, но оба электронных письма должны быть посланы.

Относительно кэширования на прокси-сервере:

А проксируют сервер HTTP, который передает Ваше сообщение к серверу, ничего никогда не кэшировал бы кроме ПОЛУЧЕНИЯ или ГЛАВНОГО запроса.

Относительно кэширования сервера:

сервер А по умолчанию автоматически не обработал бы запрос POST через проверку его кэша. Но конечно запрос POST может быть отправлен к Вашему приложению или дополнению, и у Вас может быть свой собственный кэш, который Вы читаете из того, когда параметры являются тем же.

Лишение законной силы ресурса:

Проверка RFC 2616 S. 13.10 HTTP 1.1 показывает, что метод POST должен делать недействительным ресурс для кэширования.

6
задан Rüdiger 27 August 2009 в 12:33
поделиться

7 ответов

Ваш AbstractClass должен обеспечивать реализацию для Свойство из интерфейса IBase , даже если это просто абстракция:

public abstract class AbstractClass : IBase
{
    public override string ToString()
    {
        return "I am abstract";
    }

    public abstract string Property { get; }
}

Обновление: Люк прав, что в конкретной реализации необходимо указать, что Свойство является переопределением, иначе вы получите сообщение «не реализует унаследованный абстрактный член. "ошибка:

public class ConcreteClass : AbstractClass
{
    public override string Property { 
        get {
            return "I am Concrete";
        }
    }
}
20
ответ дан 8 December 2019 в 03:01
поделиться

AbstractClass должен реализовывать IBase, который содержит свойство, а вы не реализовали его

2
ответ дан 8 December 2019 в 03:01
поделиться

Ваш абстрактный класс не реализует интерфейс IBase . Просто добавьте свойство Property в AbstractClass .

public abstract String Property { get; }
2
ответ дан 8 December 2019 в 03:01
поделиться

Вы должны добавить абстрактную реализацию свойства в свой AbstractClass:

public abstract class AbstractClass : IBase
{
    public override string ToString()
    {
        return "I am abstract";
    }

    public abstract string Property { get; }

}

И ключевое слово override в класс Concrete

3
ответ дан 8 December 2019 в 03:01
поделиться

Вам необходимо объявить Свойство в AbstractClass , чтобы оно выполняло контракт IBase .

Если вы хотите ConcreteClass , чтобы иметь возможность переопределить Свойство , тогда вы должны объявить его как abstract или virtual . Затем вам необходимо объявить реализацию ConcreteClass свойства с переопределением .

    public interface IBase
    {
        string Property { get; }
    }

    public abstract class AbstractClass : IBase
    {
        public abstract string Property { get; }

        public override string ToString()
        {
            return "I am abstract";
        }
    }

    public class ConcreteClass : AbstractClass
    {
        public override string Property
        {
            get
            {
                return "I am Concrete";
            }
        }
    }
2
ответ дан 8 December 2019 в 03:01
поделиться

Вам необходимо реализовать IBase -property Свойство следующим образом:

public abstract class AbstractClass : IBase
{
    public override string Property()
    {
        return "This is the base-class implementation";
    }
}

Или сделать его абстрактным .

]
1
ответ дан 8 December 2019 в 03:01
поделиться

Вы должны реализовать свойство Property в абстрактном классе.

1
ответ дан 8 December 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: