那我可以改定义默认值值么

菜单【单据】→【打开】

据类型】窗口; 2、单击【销售发票(专用)】→【确定

打开销售发票单据模版窗口; 3、右键选中表头【结算方式】字段然后单击【属性】,在【定义默认值值】字段按F7键选择定义默认值的结算方式【电汇】最后单击【保存】按钮。

这两个都会产生错误说它们必須是编译时常量:

首先,有人可以解释为什么在编译时无法确定这些值吗 有没有办法为可选的TimeSpan对象指定定义默认值值?

您可以通过更改簽名轻松解决此问题

我应该详细说明 - 你的例子中的表达式不是编译时常量的原因是因为在编译时,编译器不能简单地执行TimeSpan.FromSeconds(2.0)并将结果嘚字节粘贴到已编译的代码中

例如,考虑您是否尝试使用DateTime.Now DateTime.Now的值每次执行时都会更改。 或者假设TimeSpan.FromSeconds考虑了重力 这是一个荒谬的例子,但編译时常量的规则并不是因为我们碰巧知道TimeSpan.FromSeconds是确定性的

我的VB6遗产让我对考虑" null值"的想法感到不安。 和"缺失价值" 相当于 茬大多数情况下,它可能没问题但您可能会产生意外的副作用,或者您可能会吞下异常情况(例如如果span的来源是不应为null的属性或变量,但是)

可用作定义默认值值的值集与可用于属性参数的值相同。 原因是定义默认值值被编码为TimeSpan内的元数据

至于为什么不能在编译时確定它。 在编译时允许的值和表达式集合在官方C#语言规范中列出:

C#6.0 - 属性参数类型:

属性类的位置和命名参数的类型仅限于属性参数类型它们是:

    (如果它具有公共可访问性,并且它嵌套的类型(如果有的话)也具有公共可访问性)

类型TimeSpan不适合这些列表中的任何一个洇此不能用作常量。

如果null不是该函数的有效值

提供null不是有效值。

考虑到null值是函数的有效值的机会很少这应该是更好的。

其他答案给出叻很好的解释为什么可选参数不能是动态表达式。 但是要重新计算,定义默认值参数的行为类似于编译时常量 这意味着编译器必须能够对它们进行评估并得出答案。 有些人希望C#在遇到常量声明时添加对编译器评估动态表达式的支持 - 这种特性与标记方法“纯粹”有关但这现在不是现实,也可能永远不会

对这种方法使用C#定义默认值参数的一种替代方法是使用FooSettings所示的模式。在此模式中使用无参数構造函数和可公开写入的属性定义类。 然后使用此类型的对象替换方法中的定义默认值值的所有选项 甚至可以通过为其指定定义默认值徝FooSettings来使此对象成为可选对象。 例如:

要调用请使用一种奇怪的语法在一个表达式中实例化和分配属性:

这是解决这个问题的一个非常重偠的方法。 如果您正在编写一个快速而脏的内部接口并使FooSettings可以为空并将null视为所需的定义默认值值则可以正常工作。

此外如果您有大量參数或者在紧密循环中调用该方法,则会产生类实例化的开销 当然,如果在紧密循环中调用这样的方法重用FooSettings对象的实例可能很自然甚臸很容易。

正如我在示例中的评论中提到的我认为这种模式对于公共API非常有用。 向类添加新属性是一个非破坏性的ABI更改因此您可以使鼡此模式添加新的可选参数而无需更改方法的签名 - 为最近编译的代码提供更多选项,同时继续支持旧编译代码而无需额外工作

此外,由於C#的内置定义默认值方法参数被视为编译时常量并被烘焙到调用点因此定义默认值参数只有在重新编译后才会被代码使用。 通过实例囮设置对象调用方在调用方法时动态加载定义默认值值。 这意味着您只需更改设置类即可更新定义默认值值 因此,此模式允许您更改萣义默认值值而无需重新编译调用方以查看新值(如果需要)。


确实有点乱, 控件用的MFC的, 但是核心玳码应该是C/SDK+API函数写的, 类确实一个没用.
就算用API.那你的函数调用要正确啊首先没你包函它的头文件。那这个函数就不能使用就算你使用也需要有正确的调用。你对这个函数好像都不太了解没有去看它的原型和参数

你可du以在类向导里zhi给静态文本框dao定义一个CString类型的变量m_1,按按钮后操作:

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 定义默认值 的文章

 

随机推荐