.NETのインターフェースの実装クラスはImplで終わらないのか?
Javaの文化と.NETの文化では、例えば以下の様に色々とネーミングルールが異なります。
分類 | Java | .NET |
---|---|---|
インターフェース | 特になし | 頭にIをつける(IFilterとか?) |
実装クラス | 最後にImplつける(SmpServiceImplとか?) | 特になし(と思ってた!!) |
しかしまぁ、ちゃんと見てたら.NETにもちょこちょことImplで終わってるクラスもあるんですよね。例えばAuto Mapperの実装とかも結構Implが入ってます。
せっかくなので、以下のテストコードを用いて試してみました。いくつかのアセンブリからクラスを持ってきて、インターフェースの実装クラスからImplで終わっているクラスを引っ張ってきました。
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Reflection; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //var assemblies = typeof(Program).Assembly.GetReferencedAssemblies() // .Select(assemblyName => Assembly.Load(assemblyName)); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); Console.WriteLine("読み込んだアセンブリ = {0}", string.Join(" , ", assemblies.Select(a => Path.GetFileName(a.CodeBase)).ToArray())); var classes = assemblies.Select(assembly => assembly.GetTypes()) .SelectMany(t => t).Where(t => t.GetInterfaces().Count() > 0); var implClasses = classes.Where(t2 => t2.FullName.EndsWith("Impl")); Console.WriteLine("Implで終わるクラスの割合 = {0}/{1}", implClasses.Count(), classes.Count()); Console.WriteLine("Implで終わるクラス一覧 = {0}", string.Join(" , ", implClasses.Select(clazz => clazz.Name).ToArray())); Console.Read(); } } }
結果は以下となりました。読み込んだアセンブリ中5117個のインターフェースを実装したクラスのうち、Implがついてるクラスは4/5117個ありました。でも・・・、これってオープンソース(Codeplexの奴とか)を調査対象とするともっと比率が変わりそうだなぁ。
- 読み込んだアセンブリ
- mscorlib.dll
- Microsoft.VisualStudio.HostingProcess.Utilities.dll
- System.Windows.Forms.dll
- System.Drawing.dll
- System.dll
- Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll
- Microsoft.VisualStudio.Debugger.Runtime.dll
- ConsoleApplication1.vshost.exe
- System.Core.dll
- System.Xml.Linq.dll
- System.Data.DataSetExtensions.dll
- Microsoft.CSharp.dll
- System.Data.dll
- System.Xml.dll
- ConsoleApplication1.EXE
- Implで終わるクラスの割合
- 4/5117
- Implで終わるクラス一覧
- ActiveXImpl
- _InitRuntimeDllImpl
- XmlTextReaderImpl
- XmlValidatingReaderImpl