Открыл класс 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();
}
}
Здравствуйте, e.thrash, Вы писали:
ET>Открыл класс HttpPostedFileBase C# и увидел такую реализацию. ET>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?
Вероятно, писанины меньше. Был бы код абстрактным, пришлось бы делать(генерить) реализацию с таким же содержимым (throw NIE). А так, если кому надо, он переопределит.
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, e.thrash, Вы писали:
ET>>Открыл класс HttpPostedFileBase C# и увидел такую реализацию. ET>>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?
S>Вероятно, писанины меньше. Был бы код абстрактным, пришлось бы делать(генерить) реализацию с таким же содержимым (throw NIE). А так, если кому надо, он переопределит.
для микрософта кода меньше. а программисту студия и так подефолту делает ние
Здравствуйте, e.thrash, Вы писали:
ET>Открыл класс HttpPostedFileBase C# и увидел такую реализацию. ET>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным?
Ну, чисто технически — разница в том, что абстрактный класс нельзя инстанцировать.
То есть если сделать эти свойства абстрактными, то каждый потомок будет обязан их реализовать — иначе его не выйдет инстанцировать.
А в такой реализации можно отнаследоваться и перекрыть только то свойство, которое нам нужно.
Но в реальности, скорее всего, причины были какие-то другие — я не могу себе представить частичной реализации этого контракта, которая бы не сломалась в рантайме. Так что с этой точки зрения правильнее сделать свойства как раз абстрактными, чтобы статически отлавливать недореализации.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, e.thrash, Вы писали:
ET>>Открыл класс HttpPostedFileBase C# и увидел такую реализацию. ET>>Почему свойства сделаны виртуальными и при этом кидается ошибка вместо делания свойства просто абстрактным? S>Ну, чисто технически — разница в том, что абстрактный класс нельзя инстанцировать. S>То есть если сделать эти свойства абстрактными, то каждый потомок будет обязан их реализовать — иначе его не выйдет инстанцировать. S>А в такой реализации можно отнаследоваться и перекрыть только то свойство, которое нам нужно.
S>Но в реальности, скорее всего, причины были какие-то другие — я не могу себе представить частичной реализации этого контракта, которая бы не сломалась в рантайме. Так что с этой точки зрения правильнее сделать свойства как раз абстрактными, чтобы статически отлавливать недореализации.
именно, что в случае файла сложно представить частичную реализацию