Виртуальность, абстрактность
От: e.thrash  
Дата: 08.10.18 13:45
Оценка:
Открыл класс HttpPostedFileBase C# и увидел такую реализацию.
Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?

 [TypeForwardedFrom("System.Web.Abstractions, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")]
    public abstract class HttpPostedFileBase {

        public virtual int ContentLength {
            get {
                throw new NotImplementedException();
            }
        }

        public virtual string ContentType {
            get {
                throw new NotImplementedException();
            }
        }

        public virtual string FileName {
            get {
                throw new NotImplementedException();
            }
        }

        public virtual Stream InputStream {
            get {
                throw new NotImplementedException();
            }
        }
Re: Виртуальность, абстрактность
От: Sharov Россия  
Дата: 08.10.18 14:21
Оценка:
Здравствуйте, e.thrash, Вы писали:

ET>Открыл класс HttpPostedFileBase C# и увидел такую реализацию.

ET>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?

Вероятно, писанины меньше. Был бы код абстрактным, пришлось бы делать(генерить) реализацию с таким же содержимым (throw NIE). А так, если кому надо, он переопределит.
Кодом людям нужно помогать!
Re[2]: Виртуальность, абстрактность
От: e.thrash  
Дата: 08.10.18 14:54
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, e.thrash, Вы писали:


ET>>Открыл класс HttpPostedFileBase C# и увидел такую реализацию.

ET>>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?

S>Вероятно, писанины меньше. Был бы код абстрактным, пришлось бы делать(генерить) реализацию с таким же содержимым (throw NIE). А так, если кому надо, он переопределит.


для микрософта кода меньше. а программисту студия и так подефолту делает ние
Re: Виртуальность, абстрактность
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.18 02:33
Оценка:
Здравствуйте, e.thrash, Вы писали:

ET>Открыл класс HttpPostedFileBase C# и увидел такую реализацию.

ET>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?
Ну, чисто технически — разница в том, что абстрактный класс нельзя инстанцировать.
То есть если сделать эти свойства абстрактными, то каждый потомок будет обязан их реализовать — иначе его не выйдет инстанцировать.
А в такой реализации можно отнаследоваться и перекрыть только то свойство, которое нам нужно.

Но в реальности, скорее всего, причины были какие-то другие — я не могу себе представить частичной реализации этого контракта, которая бы не сломалась в рантайме. Так что с этой точки зрения правильнее сделать свойства как раз абстрактными, чтобы статически отлавливать недореализации.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Виртуальность, абстрактность
От: e.thrash  
Дата: 09.10.18 06:08
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, e.thrash, Вы писали:


ET>>Открыл класс HttpPostedFileBase C# и увидел такую реализацию.

ET>>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?
S>Ну, чисто технически — разница в том, что абстрактный класс нельзя инстанцировать.
S>То есть если сделать эти свойства абстрактными, то каждый потомок будет обязан их реализовать — иначе его не выйдет инстанцировать.
S>А в такой реализации можно отнаследоваться и перекрыть только то свойство, которое нам нужно.

S>Но в реальности, скорее всего, причины были какие-то другие — я не могу себе представить частичной реализации этого контракта, которая бы не сломалась в рантайме. Так что с этой точки зрения правильнее сделать свойства как раз абстрактными, чтобы статически отлавливать недореализации.

именно, что в случае файла сложно представить частичную реализацию
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.