【问题标题】:WPF Method reused on multiple pages - should I use static class or singleton?在多个页面上重用的 WPF 方法 - 我应该使用静态类还是单例?
【发布时间】:2013-08-25 22:09:03
【问题描述】:

我正在阅读单例和静态类之间的区别,但我发现唯一不同的是单例给你状态,可以实现接口和派生,而静态类没有这些东西。我不需要(可能不需要)实现接口或从类派生,所以我认为静态类是正确的做法。但我想更多地了解这个对象状态与静态类无状态的东西。您将如何定义对象的状态?状态是否意味着可重用 1 个 WPF 页面中的事件?这可能是一个愚蠢的问题,但我从不遵循理论,我只是编写代码来工作:) 这就是我现在学习它们的原因。

回到主题。 我有 1 种方法,可以为标签设置动画,用于不同 WPF 页面的不同标签:

    private void SetUpAnimation()
    {
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = -LabelNameSong.ActualWidth;
        doubleAnimation.To = CanMain.ActualWidth;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.Parse("0:0:10"));
        LabelNameSong.BeginAnimation(Canvas.RightProperty, doubleAnimation);
    }

由于我不想在每个页面上复制粘贴它,我正在考虑创建帮助类、静态类或实用程序类(与我理解的相同)来拥有这个方法,我会在任何地方调用它我需要(当然传递正确的标签作为参数)。

一些建议表示赞赏。谢谢。

【问题讨论】:

    标签: c#


    【解决方案1】:

    我会选择静态的,因为不同标签的动画之间没有交互。

    【讨论】:

    • 谢谢先生。将与静态一起去。
    【解决方案2】:

    静态类是方法都是静态的类,方法属于,而不是从该类创建的对象。当您不需要对象来保存值并稍后修改它们,而是希望传入值并且只希望该方法执行始终相同的计算或操作时,通常会使用静态类。

    单例是一种设计模式,普通类创建了一个对象,并且该对象被重用。一个单例可能有它处理的值,但是因为该对象只被创建一次,与单例交互的每个其他对象都将从相同的值中提取。如果您有可能需要在应用程序的生命周期内更改但需要共享的值,或者如果您有需要稍后存储和检索值的方法,则单例非常有用。

    【讨论】:

    • 感谢先生的深入解释。现在我明白了其中的区别。就一件事。您说过每个与单例交互的对象都将从相同的值中提取。那么,一旦你初始化了单例,它就可以作为应用程序的全局类工作?
    • 是的 - AppDomain 中的每个单例类只有一个实例。实际上,对于所有不使用 AppDomain 的情况,这意味着单例实例在应用程序中是唯一的。
    • 一旦你创建了一个 Singleton 对象,这个对象对于应用程序来说是全局的,假设你有一个对象的引用被存储或传递。如果没有某种依赖注入框架(流行的 .Net DI 容器包括 ninject、StructureMap、CastleWindsor),单例对象很难有效管理。
    【解决方案3】:

    简单地说,状态是存储在多个方法调用之间的数据。所以对于不需要存储任何东西并稍后返回的东西,只需使用静态方法即可。这是我的建议。

    当您想要控制如何访问该状态时,封装在类中的状态特别有用,因为您可以将其限制为您控制的类的方法。这有助于保持状态整洁且易于管理,因为您可以轻松查看与其相关的代码。

    【讨论】:

    • 谢谢先生的状态解释。
    【解决方案4】:

    简单

    静态类,如果方法不访问类中的全局变量

    如果您有全局变量(例如列表),则为单例

    【讨论】:

    • 我不同意。全局变量可以是静态的,可以使用静态方法访问。单例还有其他优点,但它们不是实现全局状态的唯一方法。
    • 您的观点无效。这就是单例模式的定义。如果你有静态变量你的设计是错误的
    • 唯一的静态变量是单例的实例。
    • 显然在这种情况下。
    • @MarkHomer 您的回答使单例看起来像是实现全局状态的唯一方法,或者始终是更好的方法。大多数情况下,单例会比全局静态变量更好,但实际上与全局状态相关的许多问题对于这两种方法来说都是共同的。见sites.google.com/site/michaelsafyan/software-engineering/…。说一个设计是错误的,因为它使用全局变量而不是单例,这太笼统了。两者都错的可能性更大。
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 2012-06-17
    • 2014-05-24
    • 2013-04-22
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多