2017-01-21 4 views
0

DirectoryInfoクラスがFileSystemInfoから継承されたExtensionプロパティを持っていることに気がつきました。なぜこれが宣言され実装されているのではなく、基本クラスの一部になったのか混乱しています。これはFileInfoクラスで実装されています。つまり、ディレクトリには拡張子がないため、これは奇妙なデザインの決定であるようです。DirectoryInfo.Extension - これはなぜ存在するのですか?

さらに、DirectoryInfoインスタンスで作業していて、Extensionプロパティがかなり恣意的に見えることに気付きました。これは、現在の名前ではなく、フォルダの元の名前で、小文字に変換されたようです。たとえば、元の名前のフォルダがあるとします。MyCoolFolder。その後、名前をMyGoodFolderに変更しました。 DirectoryInfo.Extensionプロパティは、おそらく、私が見たものに基づいて、.mycoolfolderと読んでください。どうして? DirectoryInfoExtensionプロパティを持つことに役立つものと、元の名前を小文字にすると便利なことは何ですか?

答えて

0

これは、このオブジェクト階層のデザイン上の欠陥です。

あなたは、これが悪い(左側のみ関連するコード)を見ていると思われる場合:非常に難しい不可能ではない

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

だけでは.NET Frameworkの設計者は、あまりにもミスを犯す受け入れ、広く使われているAPIで行われたその間違いれます下位互換性を修正することが最も優先されます。

+0

私はそれが単なる欠陥かもしれないと思っていましたが、私は知らなかったディレクトリ拡張の秘密の世界がないことを確かめたいと思っていました。私はあなたの追加の例が好きですが、それはより哲学的です。つまり、誰もがNotSupportedExceptionが悪い考えであることにいつも同意しているわけではありません(彼らはその例外を提供しました)が、私は誰も拡張機能を必要とするディレクトリに対してケースを作ることはできないと考えています。単なる技術的見落としに似ているようです。 – bubbleking

+0

もし良かったり、LをSOLIDでチェックしたりしていないのであれば疑問があります。 –

+0

いいえ、疑問はありません。 Add()をサポートする他のIListに代わるArrayを使うことができず、別のアプローチで避けられる可能性があるので、APIが貧弱だと私は同意します。 FileSystemInfoでExtensionを宣言するのは、派生クラスが1つだけ必要なときには、事務的エラーのように思えます。たぶん彼らは2つ以上の派生クラスを持つことを計画しましたか? DirectoryInfoで実装された動作は、それをさらに奇妙にします。元の名前は、最初にドットで、下に?奇妙な。 – bubbleking

関連する問題