C# - WPF 应用静态 - 类或仅函数

Hui Liu-MSFT 48,571 信誉分 Microsoft 供应商
2024-03-14T05:32:26.35+00:00

你好

a)

 public static class Logger
    {
        public static void Write(string message) => Log.Write(message);
        public static void Close() => Log.Close();

        private static LogIntern Log = new LogIntern();

        public static int CheckIntervalHours { get; set; } = 1;
        public static string LogDirPath = "log";

        private class LogIntern

b)

public partial class MessageBoxYes_No : Window, ICommand
    {
        public string Message { get; set; }
        public string Header { get; set; }
        private string Result;

        public event EventHandler CanExecuteChanged;
        public bool CanExecute(object parameter) => true;
        //public void Execute(object parameter) => ExitMessageBox((parameter != null) ? parameter.ToString() : string.Empty);
        public void Execute(object parameter)
        {
            ExitMessageBox((parameter != null) ? parameter.ToString() : string.Empty);
        }

        public MessageBoxYes_No()
        {
            InitializeComponent();
            this.DataContext = this;
        }

        public static string ShowDialog(string msg, string questionHeader = "Information...")
        {
            var msgBox = new MessageBoxYes_No() { Message = msg, Header = questionHeader };
            msgBox.ShowDialog();
            return msgBox.Result;
        }

是什么原因,如果我定义一个类静态或只定义一个函数有什么优势。

static 如果我想为我的应用程序使用全局单个实例。SingleTon模式。

你的经验是什么,什么是最佳实践?

最简单的方法是声明所有静态内容,就像我的示例 Logger 一样。

Note:此问题总结整理于 : C# - WPF App static - class or only function

Windows Presentation Foundation
Windows Presentation Foundation
.NET Framework 的一部分,它提供统一的编程模型,用于在 Windows 上构建业务线桌面应用程序。
128 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 46,376 信誉分 Microsoft 供应商
    2024-03-14T08:52:22.4+00:00

    静态类/成员和非静态类/成员之间的主要区别在于静态类不能实例化。因此,我们使用类名本身来访问静态类的成员。Singleton 是一个非静态类,它只允许创建自己的一个实例,因此它可以实现接口或从有用的基类派生。

    在内存的使用中,静态和非静态方法在第一次加载后都驻留在内存中,区别在于非静态方法由 GC 回收。

    Singleton 的两个主要优点:(源自 在 C# 中实现 Singleton)

    由于实例是在 Instance 属性方法中创建的,因此该类可以执行其他功能(例如,实例化子类),即使它可能会引入不受欢迎的依赖项。

    在对象请求实例之前,不会执行实例化;这种方法称为延迟实例化。延迟实例化可避免在应用程序启动时实例化不必要的单例。

    一般来说,单例比静态类更有优势,如果你擅长单例,请使用单例模式,如果你只是使用一个简单的工具类,就使用静态类。


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。