当前位置:首页 > 开发 > C# > 正文内容

C# 可空参数

C#7个月前 (12-05)
  • using System;
  • using System.Runtime.InteropServices;
  • public class WindowUtilities
  • {
  •     // 导入 user32.dll 中的 SetWindowPos 函数
  •     [DllImport("user32.dll", SetLastError = true)]
  •     private static extern bool SetWindowPos(
  •         IntPtr hWnd,              // 窗口句柄
  •         IntPtr hWndInsertAfter,   // 插入位置(Z 轴顺序)
  •         int X,                    // 水平位置
  •         int Y,                    // 垂直位置
  •         int cx,                   // 宽度
  •         int cy,                   // 高度
  •         uint uFlags               // 窗口大小和位置标志
  •     );
  •     // HWND 参数
  •     private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
  •     private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
  •     // SWP 参数
  •     private const uint SWP_NOMOVE = 0x0002;
  •     private const uint SWP_NOSIZE = 0x0001;
  •     private const uint SWP_NOACTIVATE = 0x0010;
  •     /// <summary>
  •     /// 设置窗口在最顶端。
  •     /// </summary>
  •     /// <param name="windowHandle">欲设置的窗口句柄。</param>
  •     /// <param name="activate">默认为激活,如果为假,则窗口显示后不激活,不获取键盘焦点。</param>
  •     /// <returns>成功返回真,失败返回假。</returns>
  •     public static bool MakeWindowTopMost(IntPtr windowHandle, bool? activate = true)
  •     {
  •         if (!activate.HasValue)
  •         {
  •             activate = true;
  •         }
  •         uint flags = SWP_NOMOVE | SWP_NOSIZE |
  •                      (activate.Value ? 0 : SWP_NOACTIVATE);
  •         return SetWindowPos(windowHandle, HWND_TOPMOST, 0000, flags);
  •     }
  • }

bool? 类型表示一个可空的布尔值。它实际上是指 Nullable<bool> 类型,这意味着它可以有三个可能的值:true、false 和 null。

当你声明一个变量为 bool? activate = true; 时,你是在创建一个名为 activate 的可空布尔变量,并将其初始值设置为 true。这意呸着:

如果调用方法时提供了 activate 参数的值,那么这个提供的值将会被使用。

如果调用方法时没有提供 activate 参数的值(即使用了默认参数),那么 activate 将会是 true。

方法内部可以通过检查 activate.HasValue 来判断是否给定了值,如果 HasValue 是 true,那么就可以安全地访问 activate.Value 获取其布尔值;如果 HasValue 是false,则 activate 为 null。

在你的例子中,bool? activate = true 是作为方法的一个带有默认值的参数声明。这意味着当调用者不明确提供 activate 参数时,该参数将自动取值为 true。这允许调用者选择性地省略此参数,而仍然可以得到一个合理的默认行为。

  • // 使用默认值 true
  • WindowUtilities.MakeWindowTopMost(someWindowHandle);
  • // 明确指定激活状态
  • WindowUtilities.MakeWindowTopMost(someWindowHandle, false);

在这两个例子中,如果没有显式提供 activate 参数,它将默认为 true,意味着窗口将会被激活并带到最前。如果提供了 false,则窗口不会被激活,但仍然会被置顶。

转载请注明出处。

本文链接:http://www.pythonopen.com/?id=1607

相关文章

C# [OnPaint]和[OnPaintBackground]的区别

OnPaint和OnPaintBackground的主要功能区别OnPaint:OnPaint方法主...

C# Byte[]转为Image

以下是在 C# 中将byte[](字节数组,通常表示图像的二进制数据)转换为Image类型的常见方法...

C# MemoryStream转为Image

        //...

C# Graphics图像抗锯齿

g.SmoothingMode = SmoothingMode.AntiAlia...

C# using与多重using

1. using 语句概述在 C# 中,using 语句主要用于确保实现了 IDisposable...

C# TextRenderer.MeasureText

TextRenderer.MeasureText是System.Windows.Forms命名空间中...