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 . /rProcessed 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 . /rProcessed 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 . /rProcessed 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 . /rProcessed 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
<%SystemRoot%>\Microsoft.NET\Framework\ v1.0.3705>asmstats.exe . /rProcessed 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 . /rProcessed 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 . /rProcessed 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 . /rProcessed 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
<%SystemRoot%>\Microsoft.NET\Managed DirectX\v4.09.00.0900>asmstats.exe . /rProcessed 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
Myslite si, ze je vhodne pouzivat assembly Microsoft.VisualBasic - ted v .NETu... Neni to spise jiz jen prezitek a lenost programatora z VB6???
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.
Potvrďte prosím přezdívku, kterou jsme náhodně vygenerovali, nebo si zvolte jinou. Zajistí, že váš profil bude unikátní.
Tato přezdívka je už obsazená, zvolte prosím jinou.