See threading mutating operands, avoiding, 167 Mutex class, 378 vs... String.Format method, 222 Priority property, 363 private access modifier, 60 private assemblies, 13 private field m
Trang 1620
partial, 77–79
sealed, 131
static, 49–50
virtual, 67–69, 128–132
Microsoft Foundation Classes (MFC), 149
Microsoft Windows Internals, Fourth Edition:
Microsoft Windows Server 2003,
Windows XP, and Windows 2000
(Russinovich & Solomon), 401
Min method, 566
mirror overload, 168
Modern C++ Design: Generic Programming and
Design Patterns Applied
(Alexandrescu), 325
Monitor class, 249, 378, 387–396, 401–402
Monitor.Enter method, 390, 393
Monitor.Exit method, 390, 393
Monitor.Pulse method, 393, 396
Monitor.Wait method, 368, 393
Mono project, 2
MoveNext method, 267, 269
mscorlib assembly, 4
MTAThreadAttribute attribute, 377
MulticastDelegate class, 280
multidimensional arrays, 251–255
multiple assemblies, 12
multiple inheritance, 132
MultiplyBy2 method, 294
MultiplyBy4 method, 294
multithreaded apartment (MTA), 377
multithreading See threading
mutating operands, avoiding, 167
Mutex class, 378
vs Monitor class, 388
Mutex objects, 401, 402
MyClass< Stack<T> >, 311
MyClass<int>, 313
MyClass<T>, 312
MyCollection<int>, 307
MyCollection<long>, 307, 316
MyCollection<T>, 307
MyContainer<int>, 316
MyContainer<T>, 316, 322
MyNestedClass<T>, 313
■ N
name conflicts, 81
named arguments, 7, 125–128
namespace aliasing, 38
namespaces, 4, 35–38
coding practices, 496–497
declaring, 36–37
global, 37 importing, 490 side effects, avoiding, 496 using, 37–38, 490
naming conventions for culture names, 219 for exceptions, 206 for interfaces, 139, 157 for methods, 138 generic type parameter placeholders and,
311 namespaces and, 36 Nathan, Adam, 9 native applications, 2, 11 native code, 2
nested classes, 71–74 .NET
exception handling and, 116 threading and, 361–378 .NET 2.0
catch clauses and, 185 unhandled exceptions in, 182–183
.NET and COM: The Complete Interoperability
Guide (Nathan), 9 The NET Developer’s Guide to Windows
Security (Brown), 9 NET Framework Security (LaMacchia), 9, 272
new constraints, 330–331 new keyword, 74, 84, 139 class types and, 103–104 member hiding and, 67, 74, 141, 149 method overrides and, 129–131 uses, 103
value types and, 103 new operator, 27, 317 nondeterministic destruction, 115 nondeterministic finalization, 118 NonGeneric method, 311
nongeneric types, 311 non-nested classes, 71 Non-Virtual Interface (NVI) pattern, 431–434 NotSupportedException, 262, 269
null values, 323–324 nullable types, 323–324 Nullable<T>, 323–324 NullReferenceException, 182, 192, 291 NVI pattern, 431–434
■ O
Object class, 101–103, 154, 243 object initializers, 6
nesting, 92
Trang 2621
syntax, 91–94
uses, 91
object keyword, 101
object references, 44
object type, 22
Object.Equals method, 103, 450–457
Object.ToString method, 218, 221, 225
ObjectDisposedException, 441
Object-Oriented Analysis/Design (OOA/D), 141
object-oriented methodologies, 25
object-oriented programming, 544
objects, 43
copies and, 434–440
C# vs C++, 27, 430
creating, 103–113, 430
destroying, 44, 113–116
disposable, 116–119
internal state of, 43
memory allocation for, 113
memory associated with, 44
terminology and, 26
On<event> method, 291
OOA/D (Object-Oriented Analysis/Design), 141
open instance delegates, 285–288
open types See generic types
operands, 167
operation chaining, 502–503
operator overloading, 18, 165–179
addition operator, 168–169
Boolean operators, 176–179
mutating operands and, 167
operators for, 169–179
parameter order and, 167–168
reasons not to use, 165
semantics and, 165
types and formats, 165–166
Visual Basic and, 457
operator precedence, 18–20
operators
applying to parameterized types, 347–357
declaring, C# vs C++, 166
optimizations, 11
optional arguments, 124–125
orderby clause (LINQ), 553–554, 563–565
ordering of object instance creation, 109–113
Ordinal property, 228
OrdinalIgnoreCase property, 228
OS threads, 361
out keyword, 122, 337
out parameters, 85, 122–123
OutOfMemoryException, 199–201
overflow errors, 174
overload resolution, 592
dynamic, 592–594
overloadable operators See operator
overloading overloaded constructors, 49 overloading methods, 123, 126 override keyword, 129
■ P
P/Invoke, 201–205 Parallel class, 420–425 Parallel Extensions, 417–418 Parallel.For method, 422 Parallel.Invoke, 425–426 param arrays, 123 param parameters, 123 parameter binding, 300–303, 538 ParameterExpression, 527 ParameterizedThreadStart delegate, 365 parameters
order, 167–168 out, 122–123 params keyword, 123 parentheses, 235 partial classes, 76–77 partial keyword, 77 partial methods described, 77–79 restrictions, 77 uses, 6, 78 partial types, 6 partially named assemblies, 12 PassAsOutParam() method, 123 PassByRef() method, 121 PassByValue() method, 121 patterns, design, 137
PE (Portable Executable) file format, 2 performance, collection types and, 262–263 phantom method, 594
PlayEvent identifier, 291 polymorphism, 44, 63–65, 129 Portable Executable (PE) file format, 2 positional arguments, 126
postfix operator (++), 167 prefix operator ( ), 167 PrepareConstrainedRegions method, 199 primary constraints, 330
Primary Interop Assemblies (PIA), 578 printf method, vs String.Format method, 222 Priority property, 363
private access modifier, 60 private assemblies, 13 private field modifier, 46
Trang 3622
private virtual methods, C++ and, 433
Pro C# 2005 and the NET 2.0 Platform, Third
Edition (Troelsen), 9
ProcessResults type, 282
profile-guided optimizations, 11
projection operators, 546
projector clause (LINQ) See group clause
(LINQ); select clause (LINQ)
properties
accessors and, 53
auto-implemented See auto-implemented
properties
declaring, 51
public, 52
read-only, 47, 53
reserved names and, 81
uses, 51
write-only, 53
protected access modifier, 60
protected field modifier, 46
protected internal access modifier, 60
protected virtual methods, 291
public access modifier, 60
public field modifier, 46
publish/subscribe, 289
Pulse method, 393, 396
■ Q
query expressions, 544–546
keywords, 549–550
query variables (LINQ), 546, 562, 563, 564
Queryable class, 565
Queryable.Where method, 553
Queue.Clear method, 256
Queue<T> class, 344
QueueProcessor class, 364
QueueUserWorkItem method, 408
■ R
R identifier, 312, 314
RAII (Resource Acquisition Is Initialization),
115, 207, 430
range checking, 244
Range method, 565
range variables (LINQ), 546, 549–550, 562–565
rank, of arrays, 248, 253
RankException, 248
Rattz, Joseph C., Jr., 576
read thread mode, 400
ReaderWriterLock, 397–401
ReaderWriterLockSlim, 400–401
readonly field modifier, 47 readonly fields, 48 readonly properties, 47, 53 readonly public field, 53 rectangular arrays, 251–253 recursion, anonymous, 540–541 recursive computations, 421 ref arguments, 120–122 ref keyword, 121 ref parameters, 121–123 reference type variables, 22–23, 27, 44 reference types, 3, 22–23, 26–27, 44 canonical forms and, 429–476 checklist for, 429, 485–486 convertability and, 247–248 default values, 27
described, 94 explicit interface implementation and, 154 identity equality and, 451–453
immutability and, 473, 476 overriding Object.Equals method for, 454–
457 sealed classes and, 430–431 type conversion, 30 type safety and, 469–473 referenced assemblies, 14 ReferenceEquals method, 456 referential equality, 456 reflection, 14, 270, 272 Regex class, 232–242 Regex.Replace method, 238 RegexOptions, 240–242 RegionInfo types, 219 Register method, 220 regular expressions searching strings with, 232–242 text substitution and, 238–240 regular-expression substitutions, 239 Release method, 402
ReleaseHandle method, 205 ReleaseMutex method, 401 ReleaseReaderLock method, 398 ReliabilityContractAttribute (ListSwap
method), 201 Remove method, 283, 292 RemoveAll method, 283 Repeat method, 565 Replace method, 234, 240 reserved member names, 59, 81–82 Reset method, 267–269
ResetAbort method, 368–370 Resource Acquisition Is Initialization (RAII),
115, 207, 430
Trang 4623
resources for further reading
assembly loading, 13
C++ design, 325
CLR, 9
code access security, 272
efficiency bottlenecks, 262
exception handling, 193
exception-neutral code, 196
hash codes, generating, 459
interface tables, 152
interface-based programming, 137
libraries, 70
metadata, 15
method tables, 129
regular expressions, 232
types, 273
Resume method, 372, 379
rethrowing exceptions, 186–187
return statement, 40–41
reverse iterators, 273–277
Reverse method, 566
RndThreadFunc method, 381, 385
rollback behavior, 211–214
rude thread abort, 369
Running state, of threads, 368, 377
Runtime Callable Wrapper (RCW), 578
RuntimeCompatibilityAttribute, 185
RuntimeHelpers class, 199
RuntimeWrappedException, 185
Russinovich, Mark E., 401
■ S
safe code, 27
safe points, 372
SafeHandle class, 114, 201–205, 407
SafeWaitHandle class, 407
sample code
complex numbers and, 247–357, 462
employee raises, delegates and, 286
media player, events and, 288–292
sbyte type, 21, 24
sealed classes, 69, 145, 430–431, 495
sealed keyword, 70, 131, 430
sealed methods, 131
searchability, 248
select clause (LINQ), 552–555, 563–564
Sells, Chris, 9, 129
semantics, operator overloading and, 165
SemaphoreFullExceptions, 402
semaphores, 402
semicolon, 20
Serializable attribute, 45
SerializableAttribute, 206 set accessor, 53
Set method, multidimensional array and, 253 SetMinThreads method, 408
sets See HashSet collection class
SetValue method, multidimensional array and,
253 shallow copies, objects and, 435, 440 short type, 21, 24
Shutdown method, 396 single inheritance, 133 single-threaded apartment (STA), 377 Singleton design pattern, 159
Singleton pattern, 80, 314 Skip method (LINQ), 562 SkipWhile method (LINQ), 562 Sleep method, 368, 371, 379, 383 SMP (symmetric multiprocessing), 381 SOA (service-oriented architecture) systems,
137 Socket class, 413 Solomon, David A., 401 SomeFunction() method, 50 SomeMethod() method, 130 SomeOperation() method, 51 sortability, 248
SortedDictionary<TKey, TValue> class, 259, 344 SortedList<T> class, 344
SortedList<TKey, TValue> class, 344 sorting, 554
SortStrategy delegate, 305 specialization, 63
spin locks, 382 SpinLock class, 385–387 SpinLock.Enter method, 384 SpinLockManager, 385 SQL, 544–545
Stack.Clear method, 256 Stack<T> class, 344 StackOverflowException, 198–199 standard query operators, 544, 547–548 Start method, 368
StartsWith method, 232 statements, 20
STAThreadAttribute attribute, 377 static classes, 79–80
static constructors, 49, 106–109, 314 exceptions thrown in, 191–192 static field modifier, 46
static fields, 46 static methods, 49–50 static modifier, 79 static receiver, 582
Trang 5624
StaticCompute method, 284
STL (Standard Template Library)
programming, 300, 502, 529, 538, 576
Stop method, 277
Strategy pattern, 292, 304–305
Strategy property, 294
streams See iterators, over infinite sets
StreamWriter, 384
String class, 215, 227, 229, 438
string literals, 216–217
string type, 22
String.Compare method, 227
String.Copy method, 438
String.Format method, 222–224
String.Intern method, 217
String.Join method, 575
StringBuilder class, 230–232
StringBuilder.AppendFormat method, 224
StringComparer class, 227
StringComparer.Create method, 228
StringComparison enumeration, 227
strings, 215
comparing, 227– 228
converting, 467
floating-point values, converting to, 219
format, 465
format specifiers and, 217–228, 465
format, 221–227
memory issues, 230
outside sources and, 228–230
overview, 215, 216
searching with regular expressions, 232–242
verbatim, 217
strong typing See also variables, implicitly
typed local
strongly named assemblies, 12–13
strongly typed languages, 17–18, 469
struct constraints, 330–331
struct declarations, 21
struct keyword, 22–23, 44, 82
struct member definitions, access modifiers, 60
structs
contents, 82
generic, 311–314
interfaces and, 87
SubmitWorkItem method, 396
Sum method, 566
SuppressFinalize() method, 118, 446
Suspend method, 369, 372, 379
Suspended state, of threads, 369
SuspendRequested state, of threads, 369
Sutter, Herb, 196
swap operations, 198
switch statement, 39 symmetric multiprocessing (SMP), 381 sync events, 404
synchronization, 249 collections and, 257 enumerators, 269 Interlocked class and, 379–385 locking objects and, 396–402 Monitor class and, 387–396 semaphores and, 402–404 SpinLock class and, 385–387 threading and, 378–407 WaitHandle and, 405–407 synchronized field, 270 Synchronized method, 257 SyncRoot property, 257, 267 syntax, 17–41
sysglobl.dll assembly, 220 system heap, 44
System namespace, 21, 35 System Performance Monitor (perfmon), 423 System.Activator namespace, 358
System.Array, 243, 253 vectors and, 250 System.Array interface, 248 System.Collections namespace, 255, 310 System.Collections.Concurrent namespace, 421 System.Collections.Generic namespace, 255,
344–345 System.Collections.ObjectModel namespace,
255–256, 260–262 System.Collections.Specialized namespace, 255 System.Console class, 80
System.Convert class, 231 System.Double namespace, 221 System.Dynamic.DynamicObject, 585 System.Exception exception, 185, 188, 206–207 System.Globalization namespace, 219
System.Int32, 150 System.Int32.MaxValue, 231 System.Ling namespace, 545 System.Ling.Enumerable class, 544, 566 System.Ling.Expressions namespace, 518, 524,
528 System.Ling.Expressions.Expression<>, 524 System.Ling.Queryable class, 503, 544, 566 System.Monitor class, 249
System.Object, 101–103, 154, 243 System.Object types, 550 System.OutOfMemoryException, 103 System.String class, 215, 227, 229, 438 System.Text.Encoding class, 216, 228–230 System.Thread class, 363
Trang 6625
System.Threading namespace, 198
System.Threading.Semaphore class, 402
System.Type namespace, 357
System.Type object, 14
System.TypeInitializationException, 191
System.ValueType, 82
■ T
T identifier, 312, 314
Take extension (LINQ), 562, 565, 573–574
TakeWhile method (LINQ), 562
Task class, 418–420
Task Parallel Library (TPL), 417–418
Parallel class, 420–425
Task class, 418–420
TaskFactory.StartNew() method, 419
TBL (Type Library), 14
template metaprogramming (C++), 501
Template Method pattern, 433
ternary operator, 169, 176
TestForEquality method, 452
text substitution, 238–240
ThenBy extension method (LINQ), 554
this keyword, 49, 51, 74, 85–87, 286
this parameter, 104
Thread class, 363
thread pools, 407–417
asynchronous method calls and, 408–416
entry, using Parallel.Invoke, 425–426
timers and, 416–417
Thread.Abort method, 368–370
Thread.AllocateDataSlot method, 375
Thread.AllocateNamedDataSlot method, 375
Thread.ApartmentState property, 377
Thread.CurrentThread property, 362
Thread.GetHashCode, 363
Thread.Interrupt method, 368, 371
Thread.IsBackground property, 373, 396, 412
Thread.Join method, 363, 368
Thread.ManagedThreadId property, 363
Thread.Priority property, 363
Thread.ResetAbort method, 368, 370
Thread.Resume method, 379
Thread.Sleep method, 368, 371, 379, 383
Thread.Suspend method, 369, 372, 379
ThreadAbortException, 183, 199, 368–371
ThreadFunc method, 362
threads/threading, 361–427
background, 372–373
concurrent programming and, 417–426
creating, 362, 363
events and, 404–405
exceptions, 400 foreground/background threads and, 372–
373 halting, 371–372 locking objects and, 396–402 Monitor class and, 387–396 .NET and, 361–378
passing data to, 363–365 recursion, 400
semaphores and, 402–404 SpinLock class and, 385–387 states of, 366–369, 400 synchronization and, 378–407 terminating/halting threads and, 369–372 unmanaged threads and, 377–378 WaitHandle and, 405–407 waiting for exiting, 372 waking, 371–372 Threading.Interlocked class, 379 ThreadInterruptedException, 368, 371 thread-local storage, 373–377
ThreadPool class, 405, 408 ThreadPool object, 394 ThreadPool.QueueUserWorkItem method, 408 thread-safe collection classes, 426
ThreadStart delegate, 362 ThreadState enumeration, 368 ThreadStaticAttribute attribute, 373 throw statement, 40–41, 182 exception-neutral code and, 194–196 rethrowing exceptions and, 186 throwing exceptions, 182–192 thunks, 279
Timer class, 416 System.Threading namespace, 417 System.WindowsForms namespace, 417 TimerProc method, 417
timers, 416–417 TInput placeholder identifier, 317 TLSClass, 374
TLSFieldClass, 374 ToArray extension method, 575 ToList extension method, 565 ToString method, 102, 463–467 customized, 218
IFormattable class, 218–219, 224–225 IFormatter class, 223
Object class, 225 String.Format method and, 223 TOutput placeholder identifier, 317 TPL See Task Parallel Library transforms, 497–501
translating exceptions, 187–188
Trang 7626
Troelsen, Andrew, 9
try statement, 183–184
exception-neutral code and, 193
try/catch statement, 20
try/finally statement, 21, 118
TryGetValue method, 259
type casting, 173
type conversion, 30
array covariance, 30–31
boxing conversion, 31
dynamic, 590–592
explicit, 44
generic, 320–321, 347–357
implicit, 44, 63–65
Type Library (TLB), 14
type safety, 309–311
reference types and, 469–473
value types and, 482–484
TypeConverter class, 468
TypeInitializationException, 191, 206
typeof keyword, 14, 358
types, 3, 21–35
anonymous, 88–91
canonical forms and, 429–487
convertibility, 467–469
convertibility and, 247–248
creating own, 43
generic, 34–35
testing, 32–34
See also built-in types
■ U
uint type, 21, 24
ulong type, 21, 24
unary operators
list, 170
overloading, 169
parameters and, 166
UnaryExpression, 527
unbound delegates, 285–288
unboxing, 94–101
undefined behavior exception, 115
unhandled exceptions, 115, 182, 183
UnhandledExceptionEventArgs, 182
unheld thread mode, 400
unmanaged threads, 377–378
unsafe (unmanaged) code techniques, 26
unspeakable field names, 89
Unstarted state, of threads, 368
upgradeable thread mode, 400
UpgradeToWriterLock method, 399
user-defined value types, 23
ushort type, 21, 24 using keyword, 4, 21, 118–119, 212 deterministic destruction and, 443 disposable objects and, 442 extension methods and, 490 namespaces and, 37 using statement, 21 UTF-16 Unicode character strings, 216
■ V
Validate method, 207 value arguments, 120 value equality, 450, 454 value keyword, 292 value type definitions, 82–88 constructors, 82–84 finalizers, 87 interfaces, 87 this keyword, 85–87 value types, 3, 22–27 canonical forms and, 476–484 checklist for, 429, 486–487 definition, 44
described, 94 Equals override and, 477–481 explicit interface implementation and, 154–
156 interface implementation and, 150, 481 new keyword for, 103
type safety and, 482–484 value equality and, 450 values, terminology and, 26 ValueType class, 481 ValueType.Equals method, 454 var keyword, 28, 89
VarArgs() method, 123 variable capture, 297–300, 533–538 variables, 21–35
default initialization, 27 implicit typing, 526 implicitly typed local, 6, 28–29 reference type, 22–23, 27, 44 type testing, 32–34
variance, 7, 332–334 delegates and, 340–344 rules, 335
vectors, vs arrays, 249, 251 verbatim strings, 217 Vermeulen, Allan, 366 versioning, 13, 156–157 Virtual Execution Systems (VESs), 2, 9 virtual keyword, 129, 148
Trang 8627
virtual methods, 67–69, 128–132
overriding, 127–131
Visitor pattern, 511–515
Visual Basic, collection types and, 260
Vlissides, John, 137, 433, 511
volatile field modifier, 48
vtables, vs interface tables, 152
■ W
Wait method, 368, 393
WaitAll method, 406
WaitAny method, 406
WaitHandle class, 402, 405, 407
WaitHandle.WaitAll method, 406
WaitHandle.WaitAny method, 406
WaitHandle.WaitOne method, 404
WaitOne method, 401–406
WaitSleepJoin state, of threads, 368
waking threads, 371
Web Services Description Language (WSDL),
8139 where clause (LINQ), 552–554, 563–564 where keyword, 329
while statement, 20, 39 Win32 functions, 204 Win32 Synchronization objects, 405 write thread mode, 400
write-only properties, 53
■ X
xperf, 422, 423
■ Y
Y fixed-point combinators, 541
”Yet Another Language Geek” blog, 511 yield blocks, 268–277, 562–563
yield break statement, 270 yield keyword, 262, 268, 317