Variable-length argument lists allow you to create methods that receive an arbitrary number of arguments. A one-dimensional array-type argument preceded by the keyword params in a method's parameter list indicates that the method receives a variable number of arguments with the type of the array's elements. This use of a params modifier can occur only in the last entry of the parameter list. While you can use method overloading and array passing to accomplish much of what is accomplished with "varargs"another name for variable-length argument listsusing the params modifier is more concise.
Figure 8.22 demonstrates method Average (lines 817), which receives a variable-length sequence of doubles (line 8). C# treats the variable-length argument list as a one-dimensional array whose elements are all of the same type. Hence, the method body can manipulate the parameter numbers as an array of doubles. Lines 1314 use the foreach loop to walk through the array and calculate the total of the doubles in the array. Line 16 accesses numbers.Length to obtain the size of the numbers array for use in the averaging calculation. Lines 31, 33 and 35 in Main call method Average with two, three and four arguments, respectively. Method Average has a variable-length argument list, so it can average as many double arguments as the caller passes. The output reveals that each call to method Average returns the correct value.
Figure 8.22. Using variable-length argument lists.
1 // Fig. 8.22: VarargsTest.cs 2 // Using variable-length argument lists. 3 using System; 4 5 public class VarargsTest 6 { 7 // calculate average 8 public static double Average( params double[] numbers ) 9 { 10 double total = 0.0; // initialize total 11 12 // calculate total using the foreach statement 13 foreach ( double d in numbers ) 14 total += d; 15 16 return total / numbers.Length; 17 } // end method Average 18 19 public static void Main( string[] args ) 20 { 21 double d1 = 10.0; 22 double d2 = 20.0; 23 double d3 = 30.0; 24 double d4 = 40.0; 25 26 Console.WriteLine( 27 "d1 = {0:F1} d2 = {1:F1} d3 = {2:F1} d4 = {3:F1} ", 28 d1, d2, d3, d4 ); 29 30 Console.WriteLine( "Average of d1 and d2 is {0:F1}", 31 Average( d1, d2 ) ); 32 Console.WriteLine( "Average of d1, d2 and d3 is {0:F1}", 33 Average( d1, d2, d3 ) ); 34 Console.WriteLine( "Average of d1, d2, d3 and d4 is {0:F1}", 35 Average( d1, d2, d3, d4 ) ); 36 } // end Main 37 } // end class VarargsTest
|
Using Command Line Arguments |
Preface
Index
Introduction to Computers, the Internet and Visual C#
Introduction to the Visual C# 2005 Express Edition IDE
Introduction to C# Applications
Introduction to Classes and Objects
Control Statements: Part 1
Control Statements: Part 2
Methods: A Deeper Look
Arrays
Classes and Objects: A Deeper Look
Object-Oriented Programming: Inheritance
Polymorphism, Interfaces & Operator Overloading
Exception Handling
Graphical User Interface Concepts: Part 1
Graphical User Interface Concepts: Part 2
Multithreading
Strings, Characters and Regular Expressions
Graphics and Multimedia
Files and Streams
Extensible Markup Language (XML)
Database, SQL and ADO.NET
ASP.NET 2.0, Web Forms and Web Controls
Web Services
Networking: Streams-Based Sockets and Datagrams
Searching and Sorting
Data Structures
Generics
Collections
Appendix A. Operator Precedence Chart
Appendix B. Number Systems
Appendix C. Using the Visual Studio 2005 Debugger
Appendix D. ASCII Character Set
Appendix E. Unicode®
Appendix F. Introduction to XHTML: Part 1
Appendix G. Introduction to XHTML: Part 2
Appendix H. HTML/XHTML Special Characters
Appendix I. HTML/XHTML Colors
Appendix J. ATM Case Study Code
Appendix K. UML 2: Additional Diagram Types
Appendix L. Simple Types
Index