Petrik
28. 12. 2004 • 23:05

Pro zajímavost: přibližnou představu o rozsahu typového modelu platformy Microsoft .NET mohou dát statistiky užitečné utility asmstats:
 

http://www.bearcanyon.com/dotnet/#asmstats
 


<%SystemRoot%>\Microsoft.NET\Framework\ v1.0.3705>asmstats.exe . /r

Processed 581 assemblies comprising 581 modules.

Types: 5,325 (of any kind)
Classes: 3,182 (1,400 public)
Attributes: 53 (13 public)
Delegates: 486 (410 public)
Interfaces: 1,124 (416 public)
Enums: 372 (191 public)
Value types: 108 (9 public)

Members: 516,096 (of any kind, instance and static)
Methods: 369,648 instance, 2,415 static
Events: 29,253 instance, 10 static
Properties: 62,764 instance, 94 static
Fields: 16,429 instance, 35,483 static


<%SystemRoot%>\Microsoft.NET\Framework\v 1.1.4322>asmstats.exe . /r

Processed 89 assemblies comprising 90 modules.

Types: 13 579 (of any kind)
Classes: 9 176 (4 265 public)
Attributes: 330 (278 public)
Delegates: 513 (226 public)
Interfaces: 1 666 (1 291 public)
Enums: 1 239 (768 public)
Value types: 655 (174 public)

Members: 659 097 (of any kind, instance and static)
Methods: 420 549 instance, 25 583 static
Events: 14 450 instance, 24 static
Properties: 52 961 instance, 1 261 static
Fields: 46 491 instance, 97 778 static

<%SystemRoot%>\Microsoft.NET\Framework\v2. 0.40607>asmstats20.exe . /r

Processed 99 assemblies comprising 100 modules.

Types: 17 089 (of any kind)
Classes: 11 134 (4 704 public)
Attributes: 435 (362 public)
Delegates: 613 (397 public)
Interfaces: 1 350 (617 public)
Enums: 2 204 (1 123 public)
Value types: 1 353 (201 public)

Members: 1 114 759 (of any kind, instance and static)
Methods: 785 537 instance, 22 565 static
Events: 36 584 instance, 33 static
Properties: 149 678 instance, 2 782 static
Fields: 56 110 instance, 61 470 static
<%SystemRoot%>\Microsoft.NET\Managed DirectX\v4.09.00.0900>asmstats.exe . /r

Processed 9 assemblies comprising 9 modules.

Types: 1 458 (of any kind)
Classes: 477 (473 public)
Attributes: 4 (4 public)
Delegates: 46 (46 public)
Interfaces: 0 (0 public)
Enums: 242 (242 public)
Value types: 689 (228 public)

Members: 36 145 (of any kind, instance and static)
Methods: 24 501 instance, 865 static
Events: 186 instance, 0 static
Properties: 4 882 instance, 22 static
Fields: 2 630 instance, 3 059 static

Jiri
27. 12. 2004 • 1:16

Myslite si, ze je vhodne pouzivat assembly Microsoft.VisualBasic - ted v .NETu... Neni to spise jiz jen prezitek a lenost programatora z VB6???

Petrik
27. 12. 2004 • 2:45

Ano i ne. Jak jste si mohl všimnout, obecně se snažím jazykově specifickým konstrukcím vyhýbat. Nemám rád ani deklarace typu Integer nebo Long, protože se pletou se staršími verzemi VB a typy Int16, Int32 nebo Int64 považuji za intuitivnější, kratší a lze je bez problému používat ve všech jazycích .NET, což zjednodušuje případnou migraci kódu z jednoho jazyka do druhého. Z toho důvodu bych dal bych CTS kompatibilním deklaracím do budoucna přednost - problém je, že i ukázky na MSDN používají typový systém VB.NET a čtenáři by mohli být tímto faktem zmateni, takže nemohu jít v tom CLR purismu do extrému.
 
Pokud tedy přece jen uvádím odkaz na Microsoft.VisualBasic, dělám to především ze dvou důvodů: Jednak pro srovnávací účely - k porovnání toho, jak se řešila tatáž věc ve starších verzích VB a ve VB.NET - především v situacích, kdy může dojít k problémům, nebo chybné interpretaci. Málo platné, ačkoliv je seriál určen pro začátečníky, převážná většina potenciálních uživatelů VB.NET má zkušenost i s některou ze starších verzí VB a při přechodu na VB.NET mohou na některé odlišnosti narazit.
 
Druhý důvod je ten, že nerad vystupuji jako dogmatik a knihovny jmenného prostoru Microsoft.VisualBasic  obsahují řadu užitečných funkcí, které citelně scházejí dokonce i programátorům v C# - stačí si projít např. diskusní fóra na konto implementace funkce IsReference(), IsNumeric() nebo třeba InputBox() v C#. Takže v případě, že daná funkce je užitečná a v CLR přímo implementována není, nevidím důvod proti jejímu využití v rámci jmenného prostoru Microsoft.VisualBasic. Oproti proprietární implementaci vaší, nebo třetí stranou má tu výhodu že je standardním způsobem zdokumentována a je součástí instalace runtime.
 
Takových užitečných funkcí je v .NET celá řada a je docela zbytečné si je implementovat po svém, když už v něm jednou jsou.  Pokud píšu v C#, nemám žádný problém vypůjčit si potřebnou funkci třeba z jmenného prostoru  Microsoft.Java#, Microsoft.VisualBasic nebo Microsoft.JScript. Zvlášť, když ty dvě posledně jmenované jsou (alespoň prozatím) standardní součást .NETu 1.X - 2.X. Není dobré vylévat s vaničkou i dítě - samozřejmě nikdo nemá patent na rozum, a v případě, že někdo bude o vhodné nativní implementaci jakékoliv funkcionality vědět, budu předem vděčný, když se tady o takovou informaci podělí s ostatními...
 
Vzhledem k tomu, že prostředí VB.NET je na rozdíl od C# zatíženo historií starších verzí VB, není nijak neobvyklé, že v něm některé záležitosti lze provést i několika různými, vzájemně rovnocennými způsoby současně. Pokud je to možné, dávám samozřejmě přednost nativní implementaci CLR, pak VB.NET a nakonec vrstvě Microsoft.VisualBasic. Někomu z tohoto důvodu může připadá VB.NET poněkud zmatený, někomu může taková svoboda volby naopak vyhovovat.

Určitě si přečtěte

Články odjinud