Danh mục

Using Array Arguments

Số trang: 9      Loại file: pdf      Dung lượng: 29.47 KB      Lượt xem: 4      Lượt tải: 0    
Jamona

Hỗ trợ phí lưu trữ khi tải xuống: 2,000 VND Tải xuống file đầy đủ (9 trang) 0

Báo xấu

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Sử dụng Array đối số Giả sử bạn muốn viết một phương pháp để xác định giá trị tối thiểu trong một tập hợp các thông số. Một cách sẽ được sử dụng một mảng. Ví dụ, để tìm giá trị nhỏ nhất của một số int
Nội dung trích xuất từ tài liệu:
Using Array ArgumentsUsing Array ArgumentsSuppose you want to write a method to determine the minimum value in a set ofparameters. One way would be to use an array. For example, to find the smallest ofseveral int values, you could write a static method called Min with a single parameterrepresenting an array of int values:class Util{ public static int Min(int[] paramList) { if (paramList == null || paramList.Length == 0) { throw new ArgumentException(Util.Min); } int currentMin = paramList [0]; foreach (int i in paramList) { if (i < currentMin) { currentMin = i; } } return currentMin; }}To use the Min method to find the minimum of two int values, you would write this:int[] array = new int[2];array[0] = first;array[1] = second;int min = Util.Min(array);And to use the Min method to find the minimum of three int values, you would write this:int[] array = new int[3];array[0] = first;array[1] = second;array[2] = third;int min = Util.Min(array);You can see that this solution avoids the need for a large number of overloads, but it doesso at a price: You have to write additional code to populate the array passed in. However,you can get the compiler to write some of this code for you by using the params keywordto declare a params array.Declaring params ArraysYou use the params keyword as an array parameter modifier. For example, heres Minagain, this time with its array parameter declared as a params array:class Util{ public static int Min(params int[] paramList) { // code exactly as before }}The effect of the params keyword on the Min method is that it allows you to call it byusing any number of integer arguments. For example, to find the minimum of two integervalues, you would write this:int min = Util.Min(first, second);The compiler translates this call into code similar to this:int[] array = new int[2];array[0] = first;array[1] = second;int min = Util.Min(array);To find the minimum of three integer values, you would write the code shown below,which is also converted by the compiler into the corresponding code that uses an array:int min = Util.Min(first, second, third);Both calls to Min (one call with two arguments and another with three arguments) resolveto the same Min method with the params keyword. And as you can probably guess, youcan call this Min method with any number of int arguments. The compiler just counts thenumber of int arguments, creates an int array of that size, fills the array with thearguments, and then calls the method by passing the single array parameter.NOTEC and C++ programmers might recognize params as a type-safe equivalent of the varargsmacros from the header file stdarg.h.There are several points worth noting about params arrays: • You can use the params keyword on only one-dimensional arrays, as in this example: • // compile-time error • public static int Min(params int[,] table) ... • You cant overload a method based solely on the params keyword. The params keyword does not form part of a methods signature, as shown in this example: • // compile-time error: duplicate declaration • public static int Min(int[] paramList) • ... • public static int Min(params int[] paramList) ... • Youre not allowed ref or out params arrays, as shown in this example: • // compile-time errors • public static int Min(ref params int[] paramList) • ... • public static int Min(out params int[] paramList) ... • A params array must be the last parameter. (This means you can have only one params array per method.) Consider this example: • // compile-time error • public static int Min(params int[] paramList, int i) ... • The compiler detects and rejects any potentially ambiguous overloads. For example, the following two Min methods are ambiguous; its not clear which one should be called if you pass two int arguments: • // compile-time error • public static int Min(params int[] paramList) • ... • public static int Min(int, params int[] paramList) ... • A non-params method always takes priority over a params method. This means if you want to, you can still create an overloaded version of a method for the common cases. For example: • public static int Min(int leftHandSide, int rightHandSide) • ... • public static int Min(params int[] paramList) ... The first version of the Min method is used when called using two int arguments. The second version is used if any other number of int arguments is supplied. This includes the case where the method is called with no arguments. Adding the non-params array method might be a useful optimization technique because the compiler wont have to create and populate so many arrays.Using params object[ ]A params int array is very useful because it allows any number of int arguments in amethod call. However, what if not only the number of arguments varies, but also theargument type? C# has a way to solve this problem, too. The technique is based on thefacts that System.Object (object) is the root of all classes, and that the compiler cangenerate code that converts value types (things that arent classes) into objects by usingboxing, as described in Chapter 8, “Understanding Values and References.” You can usea params object array to declare a method that accepts any number of arguments ofobjects, allowing the arguments passed in to be of any type. Look at this example:class Black{ public static void Hole(params object [] paramList) ...}Ive called this method Black.Hole, not because it swallows every argument, but becauseno argument can escape from it: • You can pass ...

Tài liệu được xem nhiều: