(多年后回头学习c#)被遗忘的世界 一 匿名类 与 扩展方法

1.1  匿名类 

               1 、var  与 new 一起使用 创建匿名类 

                      var captain  = new {FirstName="jor",MidName="joker",LastName="bor"};

                       这就创建了一个匿名的 对象   具有 三个属性 , 该匿名类 继承 object 。

                      var doctor= new {FirstName="jor",MidName="joker",LastName="bor"};

                     那么这两个对象的属性一样 就可以 用来 相互赋值

                        captain =doctor;

                    如还有另一个类  实例 person 他也拥有上面的三个属性 ,那么就可以 用person  来 初始化上面的对象

                      var captain  = new {person .FirstName,person.MidName,person.LastName};

1.2 扩展方法
                   有许多扩展类的方式。如果有类的源代码,继承就是给对象添加功能的好方法。       ˇ
                   但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要该类的源       、
                   代码。
                  扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。

               Money 类

using system;
namespace Wrox
(           
·
class MainEntryPoint
{
static void Main(string[] args)
(                            
′
Money cash1 = new Money()`
cash1.Amount - 40M;
Console.WriteLine("cash1.Tostring() returns: " + cash1.Tostring())`
Console∶ReadLine();
l
)
public class Money                        ,
(
private decimal amount氵             
·
public decimal Amount
(
get
(
return amount`
)
set
`  (
amount = value;
)
)                                                         `        、
public override string Tostring()
(
return "$" + Amount.Tostring();
)

 

            该类  类需要一个方法AddToAmomtrdec涮 am。mtToAdd,。 但是,由于某种原因,程序集最初的源代码
            不能直接修改。此时必须做的所有工作就是创建一个静态类,把方法AddToAmountO添加为一个静     
            态方法。对应的代码如下:

namespace Wrox
(
public statio class MoneyExtension
(
public static void AddToAmount(this Money money,` decimal amountToAdd)
(
money.Amount += amountToAdd`
l
)
)



           注意AddToAmount方法的参数。对于扩展方法,第一个参数是要扩展的类型,它放在this关键
           字的后面。这告诉编译器,这个方法是Money类型的一部分。在这个例子中,Money是要扩展的类
           型。在扩展方法中,可以访问所扩展类型的所有公有方法和属性。
           在主程序中,AddToAmount方法看起来像是另一个方法。它没有显示第一个参数,也不能对
           它进行任何处理。要使用新方法,需要执行如下调用,这与其他方法相同:
          即使扩展方法是静态的,也要使用标准的实例方法语法。注意这里使用cash1实例变量来调用
          AddToAmount,而没有使用类型名。
          如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。

你可能感兴趣的:(.net)