gpt4 book ai didi

c# - 不要在顺序结构中声明可见实例字段警告

转载 作者:行者123 更新时间:2023-12-02 03:30:04 24 4
gpt4 key购买 nike

我正在 wpf 应用程序中使用一些 DllImports 来捕获屏幕。我正在 user32.dll 中调用 GetWindowRect。它需要传递给它的 rect 结构。结构的布局很重要,因为它是 native 调用。

我正在尝试 VS 2019 预览版 2,它给了我以前从未见过的警告。 rect 中的所有字段都会生成相同的警告:

CA1051 不要声明可见实例字段

在代码的其余部分中,我通过向字段附加 {get;set;} 将字段转换为属性来修复此问题。我不知道我是否可以在布局很重要的结构中安全地执行此操作。

Rect 还警告我应该覆盖 Equals。

CA1815 Rect 应覆盖 Equals。

CA1815 矩形应覆盖相等 (==) 和不等 (!=) 运算符。

我从不比较它,也绝对不需要,我只是想修复警告。

public static class NativeMethods
{
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

public static IntPtr _GetForegroundWindow()
{
return GetForegroundWindow();
}

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern IntPtr GetDesktopWindow();

public static IntPtr _GetDesktopWindow()
{
return GetDesktopWindow();
}

//Am unable to get code analysis to shut up about this.
[DllImport("user32.dll")]
private static extern int GetWindowRect(IntPtr hWnd, ref Rect rect);

public static IntPtr _GetWindowRect(IntPtr hWnd, ref Rect rect)
{
return (IntPtr)GetWindowRect(hWnd, ref rect);
}
}

[StructLayout(LayoutKind.Sequential)]
public struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}

如何修复这些警告?

最佳答案

CA1051: Do not declare visible instance fields 的文档说:

Cause

An externally visible type has an externally visible instance field.

类型和字段的关键点都是外部。因此,修复(因为这应该只在您的应用程序内部使用)是将结构(以及公开它的类)设置为内部:

[StructLayout(LayoutKind.Sequential)]
internal struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}

internal static class NativeMethods
{
// ...
}

请注意,CA1051 警告不是由 C# 编译器生成,而是由代码分析生成,因此可以从 CA 规则集中排除或忽略(尽管文档建议为 not suppress it )。

关于c# - 不要在顺序结构中声明可见实例字段警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com