您的位置:首页 > 其它

扩展方法

2015-10-24 15:50 155 查看
用类和结构说明值传递和引用传递

由于结构是 值类型,那么,当您对方法的 使用结构值 ,方法受到并对结构参数的副本。 方法无法访问原始结构中调用方法并不能将其更改任何方式。 该方法可以仅更改副本。

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

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 方法。

• 如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  扩展