diff --git a/Study.DelegateSeries.Core/DeclareCalculatroDelegate.cs b/Study.DelegateSeries.Core/DeclareCalculatroDelegate.cs
new file mode 100644
index 0000000..8839b5a
--- /dev/null
+++ b/Study.DelegateSeries.Core/DeclareCalculatroDelegate.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Study.DelegateSeries.Core
+{
+ ///
+ /// 计算器:计算委托
+ ///
+ /// 参数A
+ /// 参数B
+ /// 计算结果
+ public delegate decimal CalculatorDelegate(decimal numberA, decimal numberB);
+}
diff --git a/Study.DelegateSeries.Core/DeclareDelegate.cs b/Study.DelegateSeries.Core/DeclareDelegate.cs
index 2ab73d7..3a7e7c1 100644
--- a/Study.DelegateSeries.Core/DeclareDelegate.cs
+++ b/Study.DelegateSeries.Core/DeclareDelegate.cs
@@ -2,32 +2,26 @@
using System.Collections.Generic;
using System.Text;
+//命名空间同级:调用方只需要引用定义类库就能使用;不需要使用Uing语句引入定义委托的命名空间。
+public delegate string NamespaceLevelDelegate();
+
+public delegate string ToLowerDelegate(string source);
+
namespace Study.DelegateSeries.Core
{
-
- ///
- /// 显示类型名 委托
- ///
- /// 类型名
- public delegate string ShowTypeNameDelegate();
+ //类同级:最常用和推荐的,可见范围与使用方法与类相同。
+ public delegate string ClassLevelDelegate();
- ///
- /// 显示人名 委托
- ///
- /// 人名
- public delegate string ShowPersonName();
+ public class DeclareDelegateDemo
+ {
+ //类内部方法同级:可见范围与使用方法与类中方法相似,调用方须先调用类,后再调用委托。
+ public delegate string MethodLevelDelegate();
- ///
- /// 计算器:计算委托
- ///
- /// 参数A
- /// 参数B
- /// 计算结果
- public delegate decimal CalculatorDelegate(decimal numberA,decimal numberB);
+ public string GetClassName()
+ {
+ //方法体内:不允许定义委托
- ///
- /// 返回整形无参 委托
- ///
- /// 整形数字
- public delegate int IntegerDelegate();
+ return "DeclareDelegateDemo";
+ }
+ }
}
diff --git a/Study.DelegateSeries.Core/DeclarePersonDelegate.cs b/Study.DelegateSeries.Core/DeclarePersonDelegate.cs
new file mode 100644
index 0000000..41e96d0
--- /dev/null
+++ b/Study.DelegateSeries.Core/DeclarePersonDelegate.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Study.DelegateSeries.Core
+{
+ ///
+ /// 显示类型名 委托
+ ///
+ /// 类型名
+ public delegate string ShowTypeNameDelegate();
+
+ ///
+ /// 显示人名 委托
+ ///
+ /// 人名
+ public delegate string ShowPersonName();
+}
diff --git a/Study.DelegateSeries.Core/Demo.cs b/Study.DelegateSeries.Core/Demo.cs
deleted file mode 100644
index 42d18c0..0000000
--- a/Study.DelegateSeries.Core/Demo.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Study.DelegateSeries.Core
-{
-
- public class Demo
- {
- public int Square(int number)
- {
- return number * number;
- }
-
- public int UseDelegate()
- {
- IntegerDelegate intDelegate = delegate () { return 5; };
-
- var total = Square(intDelegate());
-
- return total;
- }
- }
-}
diff --git a/Study.DelegateSeries.Core/StudyDelegate.cs b/Study.DelegateSeries.Core/InstanceDelegate.cs
similarity index 52%
rename from Study.DelegateSeries.Core/StudyDelegate.cs
rename to Study.DelegateSeries.Core/InstanceDelegate.cs
index 4a1fef3..b548c55 100644
--- a/Study.DelegateSeries.Core/StudyDelegate.cs
+++ b/Study.DelegateSeries.Core/InstanceDelegate.cs
@@ -1,33 +1,15 @@
using Study.DelegateSeries.Core.Calculator;
using System;
+using System.Collections.Generic;
+using System.Text;
namespace Study.DelegateSeries.Core
{
///
- /// 委托学习
- /// 使用:定义委托、实例化委托、调用委托
+ /// 实例化委托
///
- public class StudyDelegate
+ public class InstanceDelegate
{
- /*
- * 委托系列学习
- * 1、委托概念
- * 2、定义与使用委托
- * 3、多播委托
- * 4、使用匿名方法
- * 5、使用Lamda表达式
- * 6、委托使用场景
- * 7、委托与事件
- * 8、委托与接口
- * 9、其它
- * 10、总结
- */
-
- #region 定义委托,DeclareDelegate类
- #endregion
-
- #region 实例化委托
-
///
/// 基础语法
/// (c#1.0 开始提供)
@@ -55,7 +37,7 @@ namespace Study.DelegateSeries.Core
public CalculatorDelegate AnonymousInstance()
{
//c# 2.0基础语法
- CalculatorDelegate operation = delegate (decimal a,decimal b) { return (a * b) * (a * b); };
+ CalculatorDelegate operation = delegate (decimal a, decimal b) { return (a * b) * (a * b); };
return operation;
}
@@ -65,37 +47,14 @@ namespace Study.DelegateSeries.Core
///
public CalculatorDelegate LambdaInstance()
{
- CalculatorDelegate operation = (decimal a,decimal b)=> { return a * a + b * b + 2 * a * b; };
+ CalculatorDelegate operation = (decimal a, decimal b) => { return a * a + b * b + 2 * a * b; };
//自动推断
- CalculatorDelegate operation2 = (a,b) => { return a * a + b * b + 2 * a * b; };
+ CalculatorDelegate operation2 = (a, b) => { return a * a + b * b + 2 * a * b; };
//{}只有一句时的简写
- CalculatorDelegate operation3 = (a, b) => a * a + b * b + 2 * a * b ;
+ CalculatorDelegate operation3 = (a, b) => a * a + b * b + 2 * a * b;
return operation;
}
-
- #endregion
-
- #region 调用委托
- #endregion
-
- #region 闭包
- #endregion
-
- #region 多播委托
- #endregion
-
- #region 泛型委托
- #endregion
-
- #region 内置委托
- #endregion
-
- #region 委托与事件
- #endregion
-
- #region 委托与接口
- #endregion
}
}
diff --git a/Study.DelegateSeries.Core/InvokDelegate.cs b/Study.DelegateSeries.Core/InvokDelegate.cs
new file mode 100644
index 0000000..cb60bb6
--- /dev/null
+++ b/Study.DelegateSeries.Core/InvokDelegate.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Study.DelegateSeries.Core
+{
+ ///
+ /// 调用委托
+ ///
+ public class InvokDelegate
+ {
+
+ }
+}
diff --git a/Study.DelegateSeries.Core/StaticClass.cs b/Study.DelegateSeries.Core/StaticClass.cs
new file mode 100644
index 0000000..d42ecd2
--- /dev/null
+++ b/Study.DelegateSeries.Core/StaticClass.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Study.DelegateSeries.Core
+{
+ public static class StaticClass
+ {
+ public static string GetName()
+ {
+ return "StaticClass";
+ }
+ }
+}
diff --git a/Study.DelegateSeries.Test/DeclareDelegateTest.cs b/Study.DelegateSeries.Test/DeclareDelegateTest.cs
new file mode 100644
index 0000000..d30c2d2
--- /dev/null
+++ b/Study.DelegateSeries.Test/DeclareDelegateTest.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace Study.DelegateSeries.Test
+{
+ public class DeclareDelegateTest
+ {
+ }
+}
diff --git a/Study.DelegateSeries.Test/GlobalDelegateTest.cs b/Study.DelegateSeries.Test/GlobalDelegateTest.cs
new file mode 100644
index 0000000..0325f6d
--- /dev/null
+++ b/Study.DelegateSeries.Test/GlobalDelegateTest.cs
@@ -0,0 +1,18 @@
+using System;
+using Xunit;
+
+namespace Study.DelegateSeries.Test
+{
+ public class GlobalDelegateTest
+ {
+ [Fact]
+ public void Test1()
+ {
+ //ʹusingֿռ䣬Ӷüɡ
+
+ NamespaceLevelDelegate global = new NamespaceLevelDelegate(() => string.Empty);
+
+ Assert.NotNull(global.Target);
+ }
+ }
+}
diff --git a/Study.DelegateSeries.Test/InstanceDelagateTest.cs b/Study.DelegateSeries.Test/InstanceDelagateTest.cs
new file mode 100644
index 0000000..7e1ef2f
--- /dev/null
+++ b/Study.DelegateSeries.Test/InstanceDelagateTest.cs
@@ -0,0 +1,165 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Xunit;
+
+using Study.DelegateSeries.Core;
+
+namespace Study.DelegateSeries.Test
+{
+ ///
+ /// 实例化委托
+ /// 委托使用:声明 -> 实例化 ->调用
+ /// 类在实例化之后叫对象或实例,但委托在实例化后仍叫委托。
+ ///
+ public class InstanceDelagateTest
+ {
+ #region 单实例委托
+ #region 命名委托
+ ///
+ /// 实例化命名委托语法:委托名 委托对象名 = new 委托名 (方法名);
+ /// 参数:1、方法签名与委托完全匹配(返回值、参数:个数、顺序、类型)
+ /// 2、方法名既可以是静态方法的名称,也可以是实例方法的名称
+ ///
+ [Fact]
+ public void NamedDelegate_UseNewKeyword_Test()
+ {
+ //使用New关键字:和实例化类相似 new 委托名(方法名),不同的是:参数为 匹配委托签名的方法名称
+
+ ClassLevelDelegate classDelegate = new ClassLevelDelegate(GetClassName);
+
+ Assert.Equal("GetClassName", classDelegate.Method.Name);
+ }
+
+ [Fact]
+ public void NamedDelegate_InstanceMethed_Test()
+ {
+ ClassLevelDelegate classDelegate = new ClassLevelDelegate(GetClassName);
+
+ Assert.Equal("GetClassName", classDelegate.Method.Name);
+ }
+
+ [Fact]
+ public void NamedDelegate_StaticMethed_Test()
+ {
+ ClassLevelDelegate classDelegate = new ClassLevelDelegate(StaticClass.GetName);
+
+ Assert.Equal("GetName", classDelegate.Method.Name);
+ }
+
+ [Fact]
+ public void NamedDelegate_EllipsisNewKeyword_Test()
+ {
+ ClassLevelDelegate classDelegate = this.GetClassName;
+
+ Assert.Equal("GetClassName", classDelegate.Method.Name);
+ }
+
+ [Fact]
+ public void NamedDelegate_ChangeInstanceMethed_Test()
+ {
+ ClassLevelDelegate classDelegate = this.GetClassName;
+ Assert.Equal("GetClassName", classDelegate.Method.Name);
+
+ //改变赋值:由于委托是引用类型,给它赋新值,则为改变包含在委托变量中的方法地址引用,旧的引用会被垃圾回收器回收。
+ classDelegate = StaticClass.GetName;
+ Assert.Equal("GetName", classDelegate.Method.Name);
+ }
+
+
+ #endregion
+
+ #region 匿名委托
+ //匿名方法(Anonymous Methods)是没有名称只有主体的方法,提供了一种传递代码块作为委托参数的技术。
+ //匿名方法不需要指定返回类型,返回类型是从方法主体内的 return 语句推断的
+ //语法:委托类型 委托实例名 = delegate(参数){ 方法体,可以带retun 语句};
+ [Fact]
+ public void AnonymousMethodsDelegate_Test()
+ {
+ ToLowerDelegate demo = new ToLowerDelegate(delegate (string source) { return source.ToLower(); });
+
+ Assert.StartsWith("
+ /// 省略new 委托名()
+ ///
+ [Fact]
+ public void AnonymousMethodsDelegate_EllipsisNewKeyword_Test()
+ {
+ ToLowerDelegate demo = delegate (string source) { return source.ToLower(); };
+
+ Assert.StartsWith("
+ /// 省略new 委托名(),再省略参数
+ ///
+ [Fact]
+ public void AnonymousMethodsDelegate_EllipsisParameter_Test()
+ {
+ //再次省略了参数(当然,这样在方法体内也没法使用参数):编译器会自动推断
+ ToLowerDelegate demo = delegate { return "anonymousmethods"; };
+
+ Assert.StartsWith(" { return source.ToLower(); };
+
+ Assert.StartsWith(" source.ToLower();
+
+ Assert.StartsWith(" { };
+
+ Assert.NotNull(action.Method);
+ }
+
+ [Fact]
+ public void ActionT_Test()
+ {
+ Action action = (a) => { };
+
+ Assert.NotNull(action.Method);
+ }
+
+ [Fact]
+ public void Test()
+ {
+ List aa = new List();
+
+
+ }
+ #endregion
+
+ #endregion
+
+ #region 多播委托
+ #endregion
+
+ #region 辅助方法
+ private string GetClassName()
+ {
+ return this.GetType().FullName;
+ }
+ #endregion
+ }
+}
diff --git a/Study.DelegateSeries.Test/InvokDelegateTest.cs b/Study.DelegateSeries.Test/InvokDelegateTest.cs
new file mode 100644
index 0000000..83c12cf
--- /dev/null
+++ b/Study.DelegateSeries.Test/InvokDelegateTest.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Study.DelegateSeries.Test
+{
+ ///
+ /// 调用委托测试
+ ///
+ public class InvokDelegateTest
+ {
+ }
+}
diff --git a/Study.DelegateSeries.Test/StudyDelegateTest.cs b/Study.DelegateSeries.Test/PersonDelegateTest.cs
similarity index 83%
rename from Study.DelegateSeries.Test/StudyDelegateTest.cs
rename to Study.DelegateSeries.Test/PersonDelegateTest.cs
index 600aea9..2a59642 100644
--- a/Study.DelegateSeries.Test/StudyDelegateTest.cs
+++ b/Study.DelegateSeries.Test/PersonDelegateTest.cs
@@ -9,25 +9,17 @@ using Study.DelegateSeries.Core.Calculator;
namespace Study.DelegateSeries.Test
{
- public class StudyDelegateTest : IDisposable, IClassFixture
+ public class StudyDelegateTest : IDisposable, IClassFixture
{
#region 准备
- private StudyDelegate studyDelegate;
+ private InstanceDelegate studyDelegate;
- public StudyDelegateTest(StudyDelegate _studyDelegate)
+ public StudyDelegateTest(InstanceDelegate _studyDelegate)
{
this.studyDelegate = _studyDelegate;
}
#endregion
- #region xUnit框架可能性测试
- [Fact]
- public void FixtureTest()
- {
- Assert.NotNull(studyDelegate);
- }
- #endregion
-
#region 实例化委托测试
[Fact]
public void BaseInstanceTest()
diff --git a/Study.DelegateSeries.Test/UnitTest1.cs b/Study.DelegateSeries.Test/UnitTest1.cs
deleted file mode 100644
index 253f536..0000000
--- a/Study.DelegateSeries.Test/UnitTest1.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using Xunit;
-
-namespace Study.DelegateSeries.Test
-{
- public class UnitTest1
- {
- [Fact]
- public void Test1()
- {
-
- }
- }
-}
diff --git a/Study.DelegateSeries.Test/XUnitTest.cs b/Study.DelegateSeries.Test/XUnitTest.cs
deleted file mode 100644
index 0e6623d..0000000
--- a/Study.DelegateSeries.Test/XUnitTest.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Xunit;
-
-namespace Study.DelegateSeries.Test
-{
- public class XUnitTest
- {
- [Fact]
- public void UseXunit()
- {
- Assert.True(true, "ͨ");
- }
- }
-}