正如我在使用结构之前所知,我必须有一个对象。然后我无法理解以下代码。也许问题是我找不到的其他地方。请帮帮我。
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;
我认为必须有一些我不知道或误解的东西。寻求帮助。
答案 0 :(得分:1)
Cia125KBit
是一个静态成员,这意味着可以在不创建结构实例的情况下访问它。正如MSDN所说,
使用static修饰符声明一个静态成员,该成员属于该类型本身而不是特定对象。
与此相反,成员Name
未声明为静态。因此,尝试执行CanBitRate.Name
之类的操作会引发错误。
答案 1 :(得分:1)
您缺少的是关键字static
。可以将类的方法,属性或字段声明为static
以将其与单个实例分离,这意味着它可以通过类本身而不是对象来访问。
答案 2 :(得分:0)
因为Cia125KBit
是静态成员。静态成员不绑定到任何实例,只能通过类/结构名称访问。