手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

Visual Studio:针对 Java 开发人员的 C# 编程语言

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

有关索引器的更多信息,请参见 Indexer。

属性

为了增加有关类型的声明性信息,C# 引入一种叫做属性的新机制。有关类型的其他信息放在类型定义前面的声明性标记中。下面的示例向您展示了如何利用 .NET 框架属性来修饰一个类或方法。

在下面的示例中,通过添加 WebMethod 属性,GetTime 方法被标记为一个 XML Web 服务。

  using System;

  using System.Web.Services;



  public class Utilities : WebService

  {



    [WebMethod]

    public string GetTime()

    {

        return DateTime.Now.ToShortTimeString();

    }

  }

通过添加 CODE>WebMethod 属性,.NET 框架现在会自动处理调用此函数所必需的 XML/SOAP 交换。可以调用这个 Web 服务来检索下列值:

<?xml version="1.0" encoding="utf-8" ?> <string xmlns="http://tempuri.org/">7:26 PM</string>

在下面的示例中,通过添加 Serializable() 属性,Employee 类被标记为 Serializable。虽然 salary 字段被标记为 public,但是它不会被序列化,因为它是用 NonSerialized() 属性标记的。

using System;



[Serializable()]        

public class Employee  

{

   public int ID;

   public string Name;        

   [NonSerialized()] public int Salary; 

}

有关创建自定义属性的信息,请参见 Creating Custom Attributes。

委托 (Delegate)

C 、Pascal 和其他一些支持函数指针概念的语言都允许我们在运行时选择我们希望调用的函数。

Java 并没有提供任何具有函数指针功能的结构,但是 C# 却通过 System.Delegate 类提供了此功能。一个委托实例封装一个方法,它是一个可调用实体。

对于实例方法,委托由包含类的实例以及该实例中的方法组成。对于静态方法,可调用实体由一个类和此类中的静态方法组成。因此,委托可用于调用任意对象的函数,并且委托是面向对象、类型安全且可靠的。

在定义和使用委托时有三个步骤:

声明

实例化

调用

我们可以用下面的语法声明一个委托:

delegate void myDelegate();

然后,就可以用这个委托来引用返回 void 而且不带任何参数的所有函数。

类似地,要为带有 string 参数并返回 long 的任何函数创建一个委托,我们应该使用下面的语法:

delegate long myDelegate(string mystring);

然后,我们就可以将该委托指派给具有此签名的任何方法,如下所示:

myDelegate operation = new myDelegate(methodName);

重新指派委托

委托对象是不可改变的,也就是说,与它们匹配的签名一旦设置就不能改变。然而,我们可以指向另一个方法,只要它们都具有相同的签名即可。例如:

delegate myDelegate(int a, int b)

myDelegate operation = new myDelegate(Add);

operation = new myDelegate(Multiply);

这里,我们将 operation 重新指派给一个新的委托对象,这样 operation 就可以调用 Multiply 方法。只有 Add() 和 Multiply() 都具有相同的签名时,我们才可以这样做。

调用委托

调用委托相当简单,只需要将委托变量的名称替换成方法的名称即可:

delegate long myDelegate(int i, int j);

myDelegate operation = new myDelegate(Add);

long lresult = operation(10, 20);

这里用值 10 和 20 调用 Add 方法,返回一个长整型结果,并将其赋给变量 lresult。

让我们创建一个程序来快速地演示委托的创建、实例化和调用:

using System;



public class DelegateClass

{

  delegate long myDelegate (int i, int j);



  public static void Main(string[] args)

  {

    myDelegate operation = new myDelegate(MathClass.Add);



    Console.WriteLine("Call to Add method through delegate");

    long l = operation(10, 20);

    Console.WriteLine("Sum of 10 and 20 is "   l);



    Console.WriteLine("Call to Multiply method thru delegate");

    operation = new myDelegate(MathClass.Multiply);

    l = operation(1639, 1525);

    Console.WriteLine("1639 multiplied by 1525 equals "   l);



  }

}



public class MathClass

{



  public static long Add (int i, int j)

  {

    return (i j);

  }



  public static long Multiply (int i, int j)

  {

    return (i*j);

  }



}

我们会得到这样的输出:

Call to Add method through delegate

Sum of 10 and 20 is 30

Call to Multiply method through delegate

1639 multiplied by 1525 equals 2499475

如前所述,委托实例必须包含对象引用。在上面的示例中,通过将方法声明为静态的(意味着我们自己不需要指定对象引用),我们避免了这样做。然而,如果委托引用一个实例方法,就必须给出对象引用,如下所示:

MathClass obj = new MathClass();

myDelegate operation = new myDelegate(obj.Power);

其中,Power 是 MathClass 方法的一个实例。因此,如果 MathClass 的方法没有声明为静态的,我们就可以通过委托来调用它们,如下所示:

using System;



public class DelegateClass

{

  delegate long myDelegate(int i, int j);



  public static void Main(string[] args)

  {

    MathClass mathObj = new MathClass();

    myDelegate operation = new myDelegate(mathObj.Add);



    Console.WriteLine("Call to Add method through delegate");

    long l = operation(10, 20);

    Console.WriteLine("Sum of 10 and 20 is "   l);



    Console.WriteLine("Call to Multiply method thru delegate");

    operation = new myDelegate(mathObj.Multiply);

    l = operation(1639, 1525);

    Console.WriteLine("1639 multiplied by 1525 equals "   l);

  }

}


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!