扩展方法

来源:互联网 发布:搭建网络电视台 编辑:程序博客网 时间:2024/05/16 07:41

用类和结构说明值传递和引用传递
由于结构是 值类型,那么,当您对方法的 使用结构值 ,方法受到并对结构参数的副本。 方法无法访问原始结构中调用方法并不能将其更改任何方式。 该方法可以仅更改副本。
类的实例是 引用类型,而不是值类型。 当对方法的 引用类型通过值 ,方法进行引用的复制到类实例。 即方法受到实例,而不是复制实例的地址的副本。 在调用方法的类实例都有一个地址,在调用方法的参数的地址的副本,因此,两个地址是否引用同一对象。 由于该参数包含该地址的副本,调用方法不能更改类实例的地址在调用方法的。 但是,调用方法可以使用该地址访问原始地址和该副本引用的类成员。 如果调用方法将类成员,在调用方法的原始类的实例也会发生更改。

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 方法。
• 如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。

0 0
原创粉丝点击