【Unity16】C#接⼝,委托,匿名⽅法,Lamda 表达式的定义及使⽤
PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,⽅便后期写总结,笔记为⽇更。 笔记内容均为 ⾃⼰理解,不保证每个都对。 C#笔记未按照难度排列
Part 1 接⼝
接⼝定义了属性、⽅法和事件,这些都是接⼝的成员。接⼝只包含了成员的声明。成员的定义是派⽣类的责任。接⼝提供了派⽣类应遵循的标准结构。接⼝使得实现接⼝的类或结构在形式上保持⼀致。
若在团队中,能够规范整个团队⽅法函数的命名规范。
也就是:接⼝定义了函数规则,派⽣类必须实现接⼝函数规则 命名: 权限 + interface + 接⼝名 { 约束⽅法 }
例如:测试类://
接⼝:
//约束,对⽅法进⾏约束
//⽅法名相同,派⽣类必须实现该⽅法
//命名:  权限 + interface + 接⼝名 {  约束⽅法  }
//⽅法可以遵守多个 接⼝规则
//接⼝可以遵守多个接⼝,⽅法也要遵守接⼝
//索引器可以有多个,但参数得不同
//多个接⼝中有相同的⽅法名字时,⼦类实现⼀个即可
//接⼝⽗类 和 ⼦类有同名的时候, 前⾯ + new
writeline函数
public interface IButton //定义了 IButton 接⼝,主要有类 继承,则该类必须实现
该函数
{
void Click();
}
public interface IDrag : IButton //定义了IDrag 接⼝,该接⼝⼜是IButton 的派⽣,所以 继承IDrag 时相当于同时继承了IButton
{
void Drag();
int this[int index]    //可以有多个索引器,但参数不能⼀样
{
set;
get;
}
int this[string name]
{
set;
get;
}
}
测试代码:
public class Girl : IDrag  //遵守后必须实现接⼝⽅法,传递关系
{        int Age = 10;
int Number = 2;
public void Drag()  //实现IDrag 的Drag ⽅法
{
Console.WriteLine("Girls Drag !");
}
public void Click()  //实现IButton 的
Click ⽅法
{
Console.WriteLine("Girls Click !");
}
public int this[int index]  //实现IDrag 的this[int index] 索引器⽅法
{
get
{
if (index == 0)
return Age;
else
return Number;
}
set
{
Age = value;
Number = value;
}
}
public int this[string name]  //实现IDrag 的this[string name] 索引器⽅法
{
get
{
if (name == "Age")
return Age;
else
return Number;
}
set
{
Age = value;
Number = value;
}
}
}
Girl tmpGirl = new Girl();  //实例化
tmpGirl.Click();    //调⽤Click 函数
tmpGirl.Drag();    //调⽤Drag 函数
Console.WriteLine("Age ==  {0}    Number == {1}", tmpGirl[0], tmpGirl[1]);
tmpGirl[0] = 27;
tmpGirl[1] = 234;
Console.WriteLine("Age ==  {0}    Number == {1}", tmpGirl[0], tmpGirl[1]);
Console.ReadLine();
输出结果为:
Part 2 委托:
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个⽅法的引⽤的⼀种引⽤类型变量。引⽤可在运⾏时被改变。通过委托,在⼀定程度上能够降低程序的耦合度,不⽤通过应⽤实例化其他类,就可以使⽤其他类的函数
委托的命名:
建⽴委托关系:例⼦://
委托:  ⽅法指针
//delegate 可以写在类⾥,写可以写在类外
public delegate void tmpDelegateOne();public delegate void tmpDelegateTwo();
//权限 + delegate + 返回类型 + 名字
//引⽤类型
//
降低耦合性
public delegate void tmpDelegateOne();
public delegate void tmpDelegateTwo();
public tmpDelegateOne tmpDelegatA;  //建⽴
tmpDelegatA = new tmpDelegateOne(Debug);        //建⽴委托
tmpDelegatA();      //访问委托  Debug
{
public tmpDelegateOne tmpDelegatA;  //建⽴
public void LendMoney()
{
//tmpDelegatA = new tmpDelegateOne(Debug);        //建⽴委托
tmpDelegatA();      //访问委托
Console.WriteLine("PeopleA LendMoney");
}
public void Debug()
{
Console.WriteLine("This is the Deubug");
}
public PeopleA()
{
}
public PeopleA(tmpDelegateOne tmpDelegate)
{
tmpDelegatA();      //访问委托
}
}
public class PeopleB
{
PeopleA peopleA;
public tmpDelegateOne tmpDelegatA;
public void MakeMoney()
{
Console.WriteLine("PeopleB MakeMoney");
peopleA.LendMoney();
}
public void SadBadWordA()
{
Console.WriteLine("Say Bad Word A");
}
public void SadBadWordB()
{
Console.WriteLine("Say Bad Word B");
}
public PeopleB()
{
//实例化
peopleA = new PeopleA(SadBadWordA);    //初始化,将PeopleA的委托指向SadBadWordA⽅法函数
/
/ -=为去除例如 pDelegate -= SadBadWordTwo;
//先运⾏第⼀次的指向,随后再运⾏第⼆次的指向,可⼀直指下去
}
}
测试代码:
测试结果:
Part 3 匿名⽅法:
匿名⽅法(Anonymous methods) 提供了⼀种传递代码块作为委托参数的技术。匿名⽅法是没有名称只有主体的⽅法。 在匿名⽅法中您不需要指定返回类型
定义⽅式为: delegate { ⽅法 内容} 例如:
则调⽤后:
输出结果为 :
Part 4 Lamda 表达式:
Lamda表达式 与匿名⽅法相似,命名⽅法为:例如:            PeopleA peopleA = new PeopleA();
//peopleA.LendMoney();        //调⽤LendMoney 函数⽅法
Console.WriteLine("===============================");
PeopleB peopleB = new PeopleB();
peopleB.MakeMoney();
Console.ReadLine();            //
实例化
peopleA = new PeopleA(delegate {                Console.WriteLine("This is delegate !
");                });    //初始化,定义了⼀个 输出的
匿名⽅法peopleB.MakeMoney();
() => {  ⽅法内容
}
peopleA = new PeopleA( () => {
Console.WriteLine("Lamda 1 Test");
} );    //定义了⼀个输出  的Lamda 表达式

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。