2017-01-21 6 views
0

Я только что заметил, что класс DirectoryInfo имеет свойство Extension, унаследованное от FileSystemInfo. Я смущен, почему это стало частью базового класса, а не только объявлено и реализовано в классе FileInfo. То есть, поскольку в каталогах нет расширений, это кажется странным дизайнерским решением.DirectoryInfo.Extension - Почему это существует?

Кроме того, я просто работал с экземпляром DirectoryInfo и заметил, что свойство Extension показалось довольно произвольным. Похоже, это оригинальное имя папки (а не текущее имя), преобразованное в нижний регистр. Например, допустим, у меня была папка, которая изначально называлась MyCoolFolder. Позже я сменил название на MyGoodFolder. Свойство DirectoryInfo.Extension, предположительно, основывалось бы на том, что я видел, читал .mycoolfolder. Зачем? Что может быть полезно в отношении свойства Extension на DirectoryInfo, и что полезно в том, чтобы иметь исходное имя в нижнем регистре?

ответ

0

Это просто дефект дизайна этой иерархии объектов.

Если вы думаете, что это плохо смотреть на (только левый соответствующий код):

public abstract class Array : IList 
{ 
    int IList.Add(object value) 
    { 
    throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection")); 
    } 
} 

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

+0

Я думал, что это может быть просто недостаток, но я хотел убедиться, что не было какого-то тайного мира расширений каталогов, о которых я не знал. Мне нравится ваш дополнительный пример, хотя он кажется более философским. То есть не все всегда соглашались с тем, что NotSupportedException - плохая идея (в конце концов, они предоставили это исключение), в то время как я не думаю, что кто-то может сделать случай для каталогов, нуждающихся в расширениях. Это похоже на простой технический надзор. – bubbleking

+0

Если у вас есть сомнения, если он хорош или не проверяет L в SOLID. –

+0

Нет, у меня нет сомнений. Я согласен, что это плохой API, потому что вы не можете заменить массивы для других ILists, которые поддерживают Add(), и его можно было бы избежать с помощью другого подхода. Объявление расширения в FileSystemInfo, когда оно требуется только одному производному классу, просто похоже на клерикальную ошибку. Может быть, они планировали иметь более 2 производных классов? Поведение, реализованное в DirectoryInfo, делает его еще более странным. Исходное имя, чтобы опустить, с точкой в ​​начале? Странный. – bubbleking