C# 代表与联合

本文深入探讨了C#中的代表和联合概念。代表是一种引用类型,允许对象以类型安全的方式调用方法,而联合则用于创建多选择类型,提高代码的可读性和自归档特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 代表

        因为一些编程语言中可以用函数指针来进行访问,所以代表(delegates)使得这一特定情况变得可能。与函数指针不同,代表是面向对象的,类型安全并且是可靠的。

代表是引用类型,它从公共基类:System.Delegate派生出来。

一个代表实例压缩了一个方法——一个可调用的实体。对于静态方法,一个可调用实体由类和类中的静态方法组成。

        代表的一个有趣而且有用的特性是它不知道或者不关心与它相关的对象的类型。对象所要做的所有事情是方法的签名和代表的签名相匹配。这使得代表很适合“匿名”调用。这是个很有用的功能。

定义和使用代表分为三步:声明、实例化和调用。

用 delegate声明语法来声明代表。

例子:

delegate void SimpleDelegate();

声明了一个名为 SimpleDelegate的代表,它没有任何参数并且返回 void值。

例子:

class Test
{
    static void F()
    {
        System.Console.WriteLine("Test.F");
    }
    static void Main()
    {
        SimpleDelegate d = new SimpleDelegate(F);
        d();
    }
}

创建了一个 SimpleDelegate实例,并且马上就对它进行调用。

        对于为一个方法实例化一个代表并且马上调用它没有什么好说的,理由是它会比直接调用方法要简单得 多。代表在匿名使用时会显示它的用处。

例子:

void MultiCall(SimpleDelegate d, int count)
{
    for (int i = 0; i < count; i++)
    {
        d();
    }
}

介绍了一个方法 MultiCall,它重复调用 SimpleDelegate。方法 MultiCall并不知道或这关心哪种类型方法是 SimpleDelegate的目标方法,这种方法有什么样的可达性,或这些方法是静态的还是非静态的。所有关心的事情是目标方法的签名是否与一致。

二. 联合

        联合类型的声明为一个符号常数相关的组定义了一个类型名称。联合应用于“多选择”的场合,这里运 行时间是由在编译时所知道的固定的选择数目所决定。

例子:

enum Color
{
    Red,
    Blue,
    Green
}
class Shape
{
    public void Fill(Color color)
    {
        switch (color)
        {
            case Color.Red:    
                ...     
                break;
            case Color.Blue:    
                ...     
                break;
            case Color.Green:     
                ...     
                break;
            default: break;
        }
    }
}

介绍了一个联合 color和一个使用这个联合的方法。方法 Fill的名称使人很容易明白形状可以用所给的 颜色中的一种进行填充。

        因为使用联合可以使得代码更可读还可以自归档,所以使用联合比使用整数常数要好-当然,很多语言中通常没有联合。代码的自归档特点也使得开发工具可以帮助编写代码的和进行一些其它的“设计者” 行为。例如,使用 Color而不是 int作为参数类型,使得精确代码编辑器可以给出 Color的数值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值