这种使用struct的方式让我很困惑

时间:2014-07-31 08:56:24

标签: c# struct interface

正如我在使用结构之前所知,我必须有一个对象。然后我无法理解以下代码。也许问题是我找不到的其他地方。请帮帮我。

namespace Ixxat.Vci3.Bal.Can
{

    public struct CanBitrate
    {
        .....
        public static CanBitrate Cia10KBit { get; }

        public static CanBitrate Cia125KBit { get; }

        public static CanBitrate Cia20KBit { get; }

        public static CanBitrate Cia250KBit { get; }

        public static CanBitrate Cia500KBit { get; }

        public static CanBitrate Cia50KBit { get; }

        public static CanBitrate Cia800KBit { get; }

        //     Gets an array of all available CiA baud rates.
        public static CanBitrate[] CiaBitRates { get; }

        //     Gets a empty bit timing value.
        public static CanBitrate Empty { get; }

        public string Name { get; }


        public override sealed string ToString();
    }
}

Abrove all是给定的接口,我认为“Cia125KBit”是struct的一个函数。然后在另一个文件中,有一个这样的函数:

 mCanCtl.InitLine( CanOperatingModes.Standard | CanOperatingModes.ErrFrame
                        , CanBitrate.Cia125KBit);

InitLine的定义如下:

public interface ICanControl : ICanSocket
{
   ...
   void InitLine(CanOperatingModes operatingMode, CanBitrate bitrate);
}

我的问题是,CanBitrate是struct的名称,为什么它可以在像CanBitrate.Cia125KBit这样的函数中使用?据我所知,它应该是这样的

CanBitrate a;

a.Can125KBit;

我认为必须有一些我不知道或误解的东西。寻求帮助。

3 个答案:

答案 0 :(得分:1)

Cia125KBit是一个静态成员,这意味着可以在不创建结构实例的情况下访问它。正如MSDN所说,

  

使用static修饰符声明一个静态成员,该成员属于该类型本身而不是特定对象。

与此相反,成员Name未声明为静态。因此,尝试执行CanBitRate.Name之类的操作会引发错误。

答案 1 :(得分:1)

您缺少的是关键字static。可以将类的方法,属性或字段声明为static以将其与单个实例分离,这意味着它可以通过类本身而不是对象来访问。

答案 2 :(得分:0)

因为Cia125KBit是静态成员。静态成员不绑定到任何实例,只能通过类/结构名称访问。