《CLR via C#》设计类型.参数

9.参数
9.1可选参数和命名参数

有默认值的参数就是可选参数,调用有可选参数的方法时,可以选择不提供部分实参。在形参列表里:可选参数必须在所有必需参数(比如weight)后。

static void Main(string[] args)
{
    Param(145.5f, "jump", 170.5f);
    Console.ReadKey();
}
static void Param(float weight, string name = "jump", float height = 180.1f) 
{
    Console.WriteLine("name = {0}, height = {1}, weight = {2}", name, height, weight);
}

假设你要传递weight实参,那么你在调用时,就不能跳过传递height实参。但是,命名参数就允许你这样做:Param(145.5f, height: 170.5f);在实参列表里:命名参数必须在所有必需参数(比如weight)后。
可选参数的实现原理:C#编译器自动给可选参数应用一个可选特性和一个默认参数值特性,这两个特性都会存在元数据里,然后,会向默认参数值特性的构造器传递你指定的默认值,这样,编译器就可在你不提供部分实参时,从元数据中提取默认值并将值嵌入调用中。

9.2var只能声明方法内的局部变量

var根据右侧表达式推断出类型,var的主要作用:复杂类型能少打一些字。注意:不能用var声明参数,不能用var声明类型中的字段。

9.3以传引用的方式向方法传递参数

CLR默认所有方法参数都传值,C#提供了out和ref支持传引用。out:不用在调用方法前初始化out参数,也不能在方法中读取out参数的值,但必须在return前初始化out参数,out主要用于得到额外的“返回值”;ref:必须在调用方法前初始化ref参数,可以在方法中读或写ref参数的值。

对值类型和引用类型使用out和ref没啥区别,都是传的引用。

9.4向方法传递可变数量的参数

应用举例:String类型的一些方法就需要允许连接任意数量的字符串。

// 个数可变的参数
static void VariableCount(params int[] values)
{
    int i = 0;
    foreach(int value in values)
    {
        Console.WriteLine(values[i++] + " ");
    }
}

// 个数可变和类型可变的参数
static void VariableCountAndType(params Object[] objects)
{
    foreach(Object obj in objects)
    {
        Console.WriteLine(obj.GetType());
    }
}

// 在Main里:
VariableCount(new int[] { 1, 4, 7, 3, 6, 9 });
VariableCount( 1, 4, 7, 3, 6, 9 ); // 和上一行等价,因为params告诉编译器向参数应用了一个特性,帮你new了
VariableCountAndType(new Object[] { 1, "4", 7, "jump" });
VariableCountAndType(1, "4", 7, "jump" ); // 和上一行等价

注意:params只能用于最后一个参数。

参数数量和类型可变对性能都有不小的影响,要减少影响可考虑定义几个没有使用params的重载版本,以System.String类的Concat方法为例:

public static String Concat(object arg0, object arg1);
public static String Concat(object arg0, object arg1, object arg2);
public static String Concat(params object[] args); // 使用了params重载不常用的情形
public static String Concat(String str0, String str1);
public static String Concat(String str0, String str1, String str2);
public static String Concat(params String[] values); // 使用了params重载不常用的情形
9.5参数和返回类型的设计规范

参数类型还可以是泛型接口等,见书P197 P198

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CLR via C# 第4版 英文PDFKristin, words cannot express how /feel about our life together. cherish our family and all our adventures. I'm filled each day with love for Aidan (age 9)and Grant (age 5), you both have been an inspira- tion to me and have taught me to play and have fun Watching the two of you grow up has been so rewarding and enjoyable for me. am lucky to be able to partake in your lives. love and ap preciate you more than you could ever know Contents at a glance Introduction PART I CLR BASICS CHAPTER 1 The clr's execution model CHAPTER 2 Building, Packaging, Deploying, and Administering Applications and Types 33 chaPTeR 3 Shared Assemblies and Strongly Named Assemblies 65 PART I DESIGNING TYPES CHAPTER 4 Type Fundamentals 91 CHAPTER 5 Primitive, Reference, and Value Types 111 CHAPTER 6 Type and Member Basics 151 CHAPTER 7 Constants and fields 175 chaPTer 8 Methods 181 chaPTer 9 Parameters 209 CHAPTER 10 Properties 227 CHAPTER 11 Events 249 CHAPTER 12 Generics 265 CHAPTER 13 Interfaces 295 PARTⅢ ESSENTIAL TYPES CHAPTER 14 Chars, Strings, and Working with Text 317 CHAPTER 15 Enumerated Types and Bit Flags 361 CHAPTER 16 Arrays 373 CHAPTER 17 Delegates 391 CHAPTER 18 Custom Attributes 421 CHAPTER 19 Nullable value Types 441 PART IV CORE FACILITIES CHAPTER 20 Exceptions and state management 451 CHAPTER 21 The Managed Heap and Garbage Collection 505 CHAPTER 22 CLR Hosting and AppDomains 553 CHAPTER 23 Assembly Loading and reflection 583 CHAPTER 24 Runtime serialization 611 CHAPTER 25 Interoperating with WinRT Components 643 PAR V THREADING ChaPTEr 26 Thread basics 669 CHAPTER 27 Compute-Bound Asynchronous Operations 691 CHAPTER 28 IyO-Bound Asynchronous Operations 727 CHAPTER 29 Primitive thread Synchronization Constructs 757 CHAPTER 30 Hybrid Thread Synchronization Constructs 789 Index 823 Contents at a glance Contents Introduction XX PART CLR BASICS Chapter 1 The Clrs Execution Model 3 Compiling Source Code into Managed Modules Combining managed modules into assemblies Loading the Common Language Runtime 8 Executing Your Assembly's Code 11 IL and∨ erification 16 Unsafe Code The Native Code generator tool: ngen. exe 19 The Framework Class Library 22 The Common Type System The Common Language Specification Interoperability with Unmanaged Code 30 Chapter 2 Building, Packaging, Deploying, and Administering Applications and Types 33 NET Framework Deployment Goals 34 Building Types into a Module 35 Response Fil 36 A Brief Look at metadata 38 What do you think of this book We want to hear from you Microsoft is interested in hearing your feedback so we can continually improve our books and learning resources for you. To participate in a brief online survey, please visit microsoft. com/learning/booksurvey Combining Modules to Form an Assembly 45 Adding Assemblies to a Project by Using the Visual Studio IDE.51 Using the assembly Linker Adding Resource Files to an Assembly 53 Assembly Version Resource Information .54 Version numbers ..58 Culture Simple Application Deployment(Privately deployed Assemblies)...60 Simple Administrative Control(Configuration) 62 Chapter 3 Shared Assemblies and Strongly Named Assemblies 65 Two Kinds of Assemblies, Two Kinds of Deployment 66 Giving an Assembly a Strong Name 67 The global Assembly Cache 72 Building an Assembly That References a Strongly Named Assembly..74 Strongly named assemblies are tamper-Resistant 75 Delayed Signing Privately Deploying Strongly Named Assemblies How the Runtime Resolves Type References 80 Advanced Administrative Control( Configuration) 83 Publisher Policy control 86 PART I DESIGNING TYPES Chapter 4 Type Fundamentals 91 All Types Are Derived from System Object .91 Casting Between Types 93 Casting with the C# is and as Operators Namespaces and assemblies 97 How Things relate at Run time .101 Chapter 5 Primitive, Reference, and Value Types 111 Programming Language Primitive Types 111 Checked and Unchecked Primitive Type Operations 115 Reference Types and value Types 118 Boxing and Unboxing Value Types 124 Changing Fields in a Boxed Value Type by Using Interfaces and Why You Shouldnt Do This) 136 Object Equality and Identity 139 Object hash Codes .142 The dynamic Primitive Type ......144 Chapter 6 Type and member Basics 151 The Different Kinds of Type Members .151 Type visibilit 154 Friend assemblies 154 Member accessibility .156 Static Classes ...158 Partial Classes, Structures, and Interfaces .159 Components, Polymorphism, and Versioning 160 How the CLR Calls Virtual Methods, Properties, and Events 162 Using Type Visibility and Member Accessibility Intelligently...166 Dealing with Virtual Methods When Versioning Types 16 Chapter 7 Constants and Fields 175 Constants 175 Fⅰe|ds ...177 Chapter 8 Methods 181 Instance Constructors and Classes(Reference Types) 181 Instance Constructors and Structures(Value Types) 184 Type Constructors 187 Contents x Operator Overload Methods 191 Operators and Programming Language Interoperability 193 Conversion Operator Methods 195 Extension method 198 Rules and guidelines ....,200 Extending Various Types with Extension Methods 201 The Extension Attribute 203 Partial Methods 204 Rules and guidelines 207 Chapter 9 Parameters 209 Optional and Named Parameters 209 Rules and guidelines 210 The defaultParameter value and optional Attributes 212 Implicitly Typed Local Variabl 212 Passing parameters by reference to a Method 214 Passing a variable Number of arguments to a Method 220 Parameter and Return Type Guidelines 223 Const-nes 224 Chapter 10 Properties 227 Parameterless Properties 227 Automatically Implemented Properties 231 Defining Properties Intelligently 232 Object and collection Initializers 235 Anonymous Type .237 The System. Tuple type 240 Parameterful Properties 242 The performance of calling property accessor Methods 247 Property Accessor Accessibility 248 Generic prop A roperty Access 248

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值