【发布时间】:2018-07-18 01:10:14
【问题描述】:
所以这是一个奇怪的问题,有没有办法根据特定条件(例如通过某些属性)修改变量的可见性?
这可能更像是一个设计模式问题,所以请允许我解释一下我的情况:
我有一个具有许多用户可配置值的类(总共 9 个,其中 4 个是有条件的)。但是,其中一些变量仅在满足某些条件时才适用。现在,它们对用户都是可见的。我正在寻找一种方法,可以在每个范围的上下文中在编译时限制某些变量的可见性。我想避免让用户感到困惑,并让他们可能设置某些会被忽略的值。
例子:
属性B 仅在属性A 为true 时适用。如果用户将A 设置为false,则当前范围将失去B 的可见性。
var settings = new Settings() {
A = true,
B = ... //Everything is fine since A is true
}
var settings = new Settings() {
A = false,
B = ... //Compile Error, Settings does not contain definition for "B"
}
//Somewhere that uses the settings variable...
if(A) { useB(B); } else { useDefault(); }
有没有比“好的文档”更好的解决方案?
【问题讨论】:
-
是的,我想这也是我能想到的最接近的东西,但主要区别在于它们需要一个常量值,而不是依赖于某个变量或一组变量。跨度>
-
那是因为它是一个编译时选项。据我所知,您无法在运行时修改可见性。
-
@deleted :我正在寻找编译时动态范围。如果另一个开发人员甚至无法阅读文档,那么我认为调整范围不会有太大帮助。认为这是不可能的(虽然在概念上很酷),但因为总是有新的东西要学,所以我认为问问看 C# 是否有一些聪明的东西不会有什么坏处。
-
OP,这个问题毫无意义。您想根据运行时稍后发生的事情来修改编译时范围?那将如何运作?如果有人编写访问
B的代码,但尚未运行该代码,您是否希望该代码能够编译?那么,当变量在运行时发生变化时,会发生什么?您是否希望应用程序突然停止工作?代码无效时不会自行擦除。
标签: c# design-patterns scope conditional visibility