相关疑难解决方法(0)

C#接口破坏,ABI

假设我们class X在程序集的版本1中A.dll:

class X {
    SomeType Property { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

然后在程序集的第2版中A.dll:

class X {
    SomeType Property { set; get; }
    SomeType OtherProperty { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

现在假设我们有第二个B.dll加载A.dll和使用X的程序集.是否会添加属性会OtherProperty破坏ABI?将B.dll无法使用A.dll/ X?如果没有,声明的顺序会有什么不同吗?如果属性是虚拟的,它有什么不同吗?

我想我真的在问:ABI的一般规则是什么?我知道在发布之后更改接口是一件坏事,但我真的希望能够在某些情况下添加属性,而无需添加子类.

.net c# abi binary-compatibility

9
推荐指数
2
解决办法
1830
查看次数

在中间添加枚举

我偶然发现了一个代码,我的同事最近修改了现有的枚举,并在最后一个枚举之前添加了另一个枚举,我猜他可能已经这样做了,因为最后一个枚举是None(我们不在同一个时区讨论).

我担心的是,如果解决方案中的任何代码试图获取None Enum的整数值(幸运的是我无法找到它,但是将来某些代码会尝试做什么),那么这可能会产生错误的结果.

这不安全吗?

  1. 在最后添加枚举
  2. 或者将整数值与每个枚举相关联,以便解决排序问题?

请多点亮一点.

更新: 在其中一个问题中,我读到@Marc Gravell提到插入中间是危险的,我是否理解正确?请参阅/sf/answers/890123041/

c# enums

5
推荐指数
1
解决办法
549
查看次数

有关在C#中构建错误代码的建议

我是C#的新手,如果我的一些概念倾斜,请原谅我.我正在使用Canon EDSDK,为了让生活更轻松,我希望能够将错误消息看作文本而不是十六进制值.EDSDK.cs文件包含一长串错误,例如:

public const uint EDS_ERR_TAKE_PICTURE_CARD_NG = 0x00008D07;
public const uint EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG = 0x00008D08;
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将所有这些放入某种查找表中,以便输入HEX错误代码并将实际消息作为字符串返回.例如

Hashtable EDSDKErrorCodes = new Hashtable();

EDSDKErrorCodes.Add("0x00008D01", "EDS_ERR_TAKE_PICTURE_AF_NG");
EDSDKErrorCodes.Add("0x00008D08", "EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG");
etc etc...
Run Code Online (Sandbox Code Playgroud)

在我的代码后面,我可以获取从其中一个EDSDK方法返回的错误消息,并以人类可读的形式显示它:

errorcode= EDSDK.EdsInitializeSDK();

MessageBox.Show(Convert.ToString(EDSDKErrorCodes[errorcode]));
Run Code Online (Sandbox Code Playgroud)

我的问题是..这是处理所有这些错误代码的好方法还是人们会推荐更好更有效的方法?如果是这样,我如何将哈希表填充为一系列常量而不必使用Add方法?

c# edsdk

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×3

.net ×1

abi ×1

binary-compatibility ×1

edsdk ×1

enums ×1