静态初始化不适用于 c# 和 xaml

Posted

技术标签:

【中文标题】静态初始化不适用于 c# 和 xaml【英文标题】:Static Initialization is not working with c# and xaml 【发布时间】:2015-03-26 21:59:59 【问题描述】:

这就是问题所在。我做了一类枚举来跟踪难度级别。当我通过我的主要关卡时,它不会传递到我的 OtherPage 中。这是我的代码公共密封类 GlobalVars 公共枚举难度 简单, 中间的, 难的 私有静态只读 GlobalVars 实例 = new GlobalVars(); 私有 GlobalVars()

    public static GlobalVars Instance
    
        get
        
            return instance;
        
    

这是我在主页中所做的 私人无效Easy_Checked(对象发送者,RoutedEventArgs e) GlobalVars.Difficulty _difficulty = GlobalVars.Difficulty.Easy; //_difficulty = GlobalVars.Difficulty.Easy;

接下来我进入我的部门页面并执行以下操作

初始化一个类的实例

私有 GlobalVars.Difficulty _difficulty;

然后

如果(_difficulty == GlobalVars.Difficulty.Easy) 做一些简单的事

如果(_difficulty == GlobalVars.Difficulty.Hard) 努力地做某事

我的枚举值总是很容易无法将其他级别传递到此页面。

【问题讨论】:

@khlr 这是对我之前的问题进行了一些修改的问题。 【参考方案1】:

首先,您没有错误地使用了 Enum。难度是枚举(类型)。 其次,您根本使用 GlobalVars 实例,您总是在使用局部变量。实例属性必须用于使用实例,然后在实例级别设置值。

GlobalVars.Difficulty _difficulty = GlobalVars.Difficulty.Easy;    

上面的语句只给变量_difficulty赋值,而不给静态实例赋值。如果您需要携带状态或设置难度值,请使用一些实例\成员级别的变量,例如,

public Difficulty DifficultySet  get; set;     

从 MainPage 设置实例的 DifficultySet,从任何其他页面访问此值。由于您有单例(仅一个实例),因此从主页设置的值将可用于该实例。

完整的代码如下所示。 [请编写您自己的代码以了解静态、枚举和实例化​​的工作原理。]

public sealed class GlobalVars

    static readonly GlobalVars instance = new GlobalVars();

    public Difficulty DifficultySet  get; set; 

    private GlobalVars()
    

    

    public static GlobalVars Instance
    
        get
        
            return instance;
        
    

    public enum Difficulty  Easy, Intermediate, Hard ;


//main page
GlobalVars pageInstance = GlobalVars.Instance;
pageInstance.DifficultySet = GlobalVars.Difficulty.Easy;

//other page
if(GlobalVars.Instance.DifficultySet == GlobalVars.Difficulty.Easy)

    //write your logic

【讨论】:

这非常有帮助,谢谢您的更正。我会听从你的提示,希望我能得到它。

以上是关于静态初始化不适用于 c# 和 xaml的主要内容,如果未能解决你的问题,请参考以下文章

C# 6.0 新特性

C#中static静态变量的用法

C# 静态类构造函数

XAML 绑定不适用于依赖属性?

XAML - TextTrimming 不适用于 LineBreaks?

RxUI ObservableAsPropertyHelper 不适用于 XAML 绑定