gpt4 book ai didi

c# - C# 中的 void 与 private void

转载 作者:行者123 更新时间:2023-11-30 14:11:17 35 4
gpt4 key购买 nike

在 C# UI 代码中,当我创建事件方法时,它会自动填充

void simpleButton_click(object sender, Eventargs e)
{
}

这个简单的 voidprivate void 有什么区别?

最佳答案

无,是句法的。默认情况下,成员private,而类型是internal

人们经常添加 private 以保持一致性,尤其是当它位于具有许多其他成员具有不同访问属性的类或类型中时,例如 protected internal公开

所以下面两个文件是等价的:

隐式.cs

using System;

namespace Foo
{
class Car : IVehicle
{
Car(String make)
{
this.Make = make;
}

String Make { get; set; }

CarEngine Engine { get; set; }

void TurnIgnition()
{
this.Engine.EngageStarterMotor();
}

class CarEngine
{
Int32 Cylinders { get; set; }

void EngageStarterMotor()
{
}
}

delegate void SomeOtherAction(Int32 x);

// The operator overloads won't compile as they must be public.
static Boolean operator==(Car left, Car right) { return false; }
static Boolean operator!=(Car left, Car right) { return true; }
}

struct Bicycle : IVehicle
{
String Model { get; set; }
}

interface IVehicle
{
void Move();
}

delegate void SomeAction(Int32 x);
}

显式.cs

using System;

namespace Foo
{
internal class Car : IVehicle
{
private Car(String make)
{
this.Make = make;
}

private String Make { get; set; }

private CarEngine Engine { get; set; }

private void TurnIgnition()
{
this.Engine.EngageStarterMotor();
}

private class CarEngine
{
private Int32 Cylinders { get; set; }

private void EngageStarterMotor()
{
}
}

private delegate void SomeOtherAction(Int32 x);

public static Boolean operator==(Car left, Car right) { return false; }
public static Boolean operator!=(Car left, Car right) { return true; }
}

internal struct Bicycle : IVehicle
{
private String Model { get; set; }
}

internal interface IVehicle
{
public void Move(); // this is a compile error as interface members cannot have access modifiers
}

internal delegate void SomeAction(Int32 x);
}

规则总结:

  • 类型(结构枚举委托(delegate)接口(interface))默认情况下,直接在 namespace 中定义的是 internal
  • 成员(方法、构造函数、属性、嵌套类型、事件)默认为私有(private),但有两个异常(exception):
    • 运算符重载必须显式标记为public static。如果您不提供显式的 public 访问修饰符,将会出现编译错误。
    • 接口(interface)成员始终是public,您不能提供显式访问修饰符。
  • 在 C# 中,classstruct 成员默认都是 private,不像 C++ 中 structpublic默认,class默认是private
  • 在 C# 中,没有任何内容是隐式protectedprotected internal
  • .NET 支持“Friend Assemblies”,其中 internal 类型和成员对另一个程序集中的代码可见。 C# 需要 [assembly: InternalsVisibleTo] 属性来实现这一点。这与 C++ 的 friend 功能不同(C++ 的 friend 允许 class/struct 列出其他类、结构和自由函数,它们将有权访问其 private 成员)。

关于c# - C# 中的 void 与 private void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624950/

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