扩展方法
2015-10-24 15:50
155 查看
用类和结构说明值传递和引用传递
由于结构是 值类型,那么,当您对方法的 使用结构值 ,方法受到并对结构参数的副本。 方法无法访问原始结构中调用方法并不能将其更改任何方式。 该方法可以仅更改副本。
类的实例是 引用类型,而不是值类型。 当对方法的 引用类型通过值 ,方法进行引用的复制到类实例。 即方法受到实例,而不是复制实例的地址的副本。 在调用方法的类实例都有一个地址,在调用方法的参数的地址的副本,因此,两个地址是否引用同一对象。 由于该参数包含该地址的副本,调用方法不能更改类实例的地址在调用方法的。 但是,调用方法可以使用该地址访问原始地址和该副本引用的类成员。 如果调用方法将类成员,在调用方法的原始类的实例也会发生更改。
Var类型
在很多情况下,var 是可选的,它只是提供了语法上的便利。 但是,在使用匿名类型初始化变量时,如果需要在以后访问对象的属性,则必须将该变量声明为 var。 这在 LINQ 查询表达式中很常见。从源代码的角度来说,匿名类型没有名称。 因此,如果已使用 var 初始化查询变量,则只有一种方法可以访问返回的对象序列中的属性,那就是使用 var 作为 foreach 语句中的迭代变量的类型。
定义和调用扩展方法
1. 定义一个静态类以包含扩展方法。该类必须对客户端代码可见将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
2. 该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
3. 在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。
4. 按照与调用类型上的实例方法一样的方式调用扩展方法。
静态构造函数
静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
静态构造函数具有以下特点:
• 静态构造函数既没有访问修饰符,也没有参数。
• 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
• 无法直接调用静态构造函数。
• 在程序中,用户无法控制何时执行静态构造函数。
• 静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
• 静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。
• 如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。
由于结构是 值类型,那么,当您对方法的 使用结构值 ,方法受到并对结构参数的副本。 方法无法访问原始结构中调用方法并不能将其更改任何方式。 该方法可以仅更改副本。
类的实例是 引用类型,而不是值类型。 当对方法的 引用类型通过值 ,方法进行引用的复制到类实例。 即方法受到实例,而不是复制实例的地址的副本。 在调用方法的类实例都有一个地址,在调用方法的参数的地址的副本,因此,两个地址是否引用同一对象。 由于该参数包含该地址的副本,调用方法不能更改类实例的地址在调用方法的。 但是,调用方法可以使用该地址访问原始地址和该副本引用的类成员。 如果调用方法将类成员,在调用方法的原始类的实例也会发生更改。
public class test : MonoBehaviour { // Use this for initialization void Start () { TheClass c = new TheClass(); c.name="class"; TheStruct s ; s.name = "struct"; ChangeName.ChangeClassName(c); ChangeName.ChangeStructName(s); Debug.Log("After the Change"+c.name); Debug.Log("After the Change" + s.name); } // Update is called once per frame void Update () { } class TheClass { public string name; } struct TheStruct { public string name; } class ChangeName { public static void ChangeClassName(TheClass c) { c.name = "ChangeClass"; } public static void ChangeStructName(TheStruct s) { s.name = "ChangeStruct"; } } }
Var类型
在很多情况下,var 是可选的,它只是提供了语法上的便利。 但是,在使用匿名类型初始化变量时,如果需要在以后访问对象的属性,则必须将该变量声明为 var。 这在 LINQ 查询表达式中很常见。从源代码的角度来说,匿名类型没有名称。 因此,如果已使用 var 初始化查询变量,则只有一种方法可以访问返回的对象序列中的属性,那就是使用 var 作为 foreach 语句中的迭代变量的类型。
public class test : MonoBehaviour { // Use this for initialization void Start () { string[] words = { "hello", "linux ","PYTHON" }; var upperLowerWords = from w in words select new { upper = w.ToUpper(), lower = w.ToLower() }; foreach (var ul in upperLowerWords) { Debug.Log(ul.upper+ ul.lower); } } // Update is called once per frame void Update () { } }
定义和调用扩展方法
1. 定义一个静态类以包含扩展方法。该类必须对客户端代码可见将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
2. 该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
3. 在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。
4. 按照与调用类型上的实例方法一样的方式调用扩展方法。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication10 { public static class StringExtension { public static int wordCount(this String str) { return str.Split(new Char[] { ' ', '.', '!' }, StringSplitOptions.RemoveEmptyEntries).Length; } } } namespace TestExtension { using ConsoleApplication10; class Program { static void Main(string[] args) { String s = "Hello Linux!"; Console.WriteLine(s.wordCount().ToString()); Console.ReadKey(); } } }
静态构造函数
静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
静态构造函数具有以下特点:
• 静态构造函数既没有访问修饰符,也没有参数。
• 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
• 无法直接调用静态构造函数。
• 在程序中,用户无法控制何时执行静态构造函数。
• 静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
• 静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。
• 如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。
相关文章推荐
- C#、ASP.NET通用扩展工具类之TypeParse
- Lua编程示例(二):面向对象、metatable对表进行扩展
- Windows Powershell扩展类型系统
- C#、ASP.NET通用扩展工具类之LogicSugar
- SQL Server下几个危险的扩展存储过程
- jQuery 学习第七课 扩展jQuery的功能 插件开发
- 运行Node.js的IIS扩展iisnode安装配置笔记
- 一个扩展时间段的dir命令的vbs脚本
- Ruby中使用SWIG编写ruby扩展模块实例
- PHP memcache扩展的三种安装方法
- 用C/C++扩展你的PHP 为你的php增加功能
- .NET 扩展实现代码
- JS扩展方法实例分析
- JavaScript Array扩展实现代码
- 使用JQuery库提供的扩展功能实现自定义方法
- javascript String 的扩展方法集合
- 几个扩展存储过程使用方法
- php对mongodb的扩展(初出茅庐)
- linux下 C语言对 php 扩展
- JS的数组的扩展实例代码