C#中的void vs private void

时间:2013-12-17 02:42:24

标签: c# private void

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

void simpleButton_click(object sender, Eventargs e)
{
}

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

2 个答案:

答案 0 :(得分:10)

没有,这是语法上的。默认情况下,成员private,而类型为internal)。

为了保持一致性,人们通常会添加private,尤其是当它位于具有许多其他具有不同访问属性的成员的类或类型中时,例如protected internalpublic。 / p>

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

Implicit.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);
}

Explicit.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);
}

规则摘要:

  • 直接在class中定义的类型(structenumdelegateinterfacenamespace)为internal默认情况下。
  • 默认情况下,成员(方法,构造函数,属性,嵌套类型,事件)为private,但有两个例外:
    • 必须明确标记public static运算符重载。如果您没有提供明确的public访问修饰符,则会出现编译错误。
    • 接口成员始终为public,您无法提供显式访问修饰符。
  • 在C#中,classstruct成员默认为private,与C ++不同,默认情况下structpublicclass默认为private
  • C#中没有任何内容protectedprotected internal
  • .NET支持“朋友程序集”,其中internal类型和成员对另一个程序集内的代码可见。 C#需要[assembly: InternalsVisibleTo]属性才能实现此目的。这与C ++的friend功能不同(C ++的friend允许class / struct列出其他可以访问其的类,结构和自由函数private成员)。

答案 1 :(得分:-3)

void 表示将此代码块或过程标识为方法,或者它不会返回任何值。如果您看到任何类型而不是void意味着被阻止的代码或过程是函数或属性

这是方法

private void DoSomething()
{
...code
}

这是功能

private int DoSomething()
{
..code
return 1
}

私有表示方法,函数或属性无法访问到类外部,但可以在类本身内部调用

public 表示方法,函数或属性可访问到类外部,也可以在类本身内部调用