nat*_*ere 4 .net c# attributes
是否Attribute在.Net Framework中建议将代码标记为"不支持"?
到目前为止,我一直在使用,ObsoleteAttribute但它并不总是完全准确.例如,目前我正在编写托管的FMOD包装器,我想清楚地标记仅适用于不支持的平台的属性,枚举值等.
假设我有类似枚举的东西来确定音频文件的格式.我想明确指出,对于.Net端口至少,某些值是不相关的.例如:
enum SoundFormat{
Wav,
Mp3,
OggVorbis,
[Obsolete("Xbox360 only")] Xma,
[Obsolete("GameCube only")] GcadPcm,
[Obsolete("PS2/PSP only")] Vag,
}
Run Code Online (Sandbox Code Playgroud)
虽然使用Obsolete作品和某种用途的目的相同,但它也具有误导性,因为它们在技术上不会因为不受支持而过时.这是最终没有什么影响的事情之一,但每当我把Obsolete它放在不准确的地方时,它总会让我烦恼.
PS:在它建议之前,NotImplementedException并且NotSupportedException真的不回答这个问题,因为它们只提供运行时指导.我对编译时更感兴趣.
我建议你使用编译器指令来创建不同版本的程序集:
enum SoundFormat
{
Wav,
Mp3,
OggVorbis,
#if Xbox360
Xma,
#elif GameCube
GcadPcm,
#elif PS
Vag,
#endif
}
Run Code Online (Sandbox Code Playgroud)
如果你只在定义了Xbox360的情况下编译程序集,那么枚举将如下所示:
enum SoundFormat
{
Wav,
Mp3,
OggVorbis,
Xma,
}
Run Code Online (Sandbox Code Playgroud)
更新:从您的原始问题中不清楚您要实现的目标.但是如果你想要所有这些枚举成员存在,并且如果使用特定于平台的格式就有编译器警告,那么你可以使用Pablo Fernandez建议的方法:
[Obsolete("Not supported")]
public class NotSupportedAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)
然后使用NotSupported属性(更好地描述intent Obsolete)来装饰特定于平台的格式:
enum SoundFormat
{
Wav,
Mp3,
OggVorbis,
[NotSupported]
Xma,
[NotSupported]
GcadPcm,
[NotSupported]
Vag
}
Run Code Online (Sandbox Code Playgroud)
编译器仍将生成"过时"警告,但具有特定消息:
警告1'Foo.Bar.NotSupportedAttribute'已过时:'不支持'
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |