JUST DO IT ~

我只想当个程序员

c# delegate method 和接口实现的动态的区别。







 

using System;
delegate double Function(double x); // 代理函数
class Multiplier
{
    
double factor;
    
public Multiplier(double factor)
    
{
        
this.factor = factor;
    }

    
public double Multiply(double x)
    
{
        
return x * factor;
    }

}


public interface IFun {
    
double Function(double x);
}


class funImp1 : IFun
{
    
double factor;
    
public funImp1(double factor)
    
{
        
this.factor = factor;
    }

    
public double Function(double x)
    
{
        
return x * factor;
    }

}


class funImp2 : IFun
{
    
public double Function(double x)
    
{
        
return  Math.Sin(x);
    }


}



class Test
{
    
static double Square(double x)
    
{
        Console.WriteLine(
"1  静态方法  static double Square(double x)"); 
        
return x * x;
    }

    
static double[] Apply(double[] a, Function f)
    
{


        Console.WriteLine(
"2   double[] Apply(double[] a, Function f) " + f ); 


        
double[] result = new double[a.Length];
        
for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);  // 自己使用当成函数名称 
        return result;
    }




    
static double[] Apply(double[] a, IFun f)
    
{


        Console.WriteLine(
"2   double[] Apply(double[] a, Function f) " + f);


        
double[] result = new double[a.Length];
        
for (int i = 0; i < a.Length; i++) result[i] = f.Function(a[i]); // 调用接口中制定的方法 
        return result;
    }





    
static void Main()
    
{
        
double[] a = 0.00.51.0 };
        
double[] squares = Apply(a, new Function(Square));
        
double[] sines = Apply(a, new Function(Math.Sin));
        Multiplier m 
= new Multiplier(2.0);
        Function f 
= new Function(m.Multiply);
        
double[] doubles = Apply(a, f );

       
        
double[] b = 0.10.51.0 };
        doubles 
= Apply(b, f );


        IFun ifun 
= new funImp1(2);
         doubles 
= Apply(a, ifun );
         Console.WriteLine(
" "+doubles);




    }

}


 

posted on 2008-02-11 13:00 小高 阅读(660) 评论(0)  编辑  收藏 所属分类: DotNet


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

统计

常用链接

留言簿(3)

随笔分类(352)

收藏夹(19)

关注的blog

手册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜