首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#中的void与私有void

C#中的void与私有void
EN

Stack Overflow用户
提问于 2013-12-17 02:42:24
回答 2查看 49K关注 0票数 4

在C#用户界面代码中,当我创建事件方法时,它将自动填充到

代码语言:javascript
运行
复制
void simpleButton_click(object sender, Eventargs e)
{
}

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

EN

回答 2

Stack Overflow用户

发布于 2013-12-17 02:44:03

不,这是句法。默认情况下,成员private,而类型是internal)。

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

因此,以下两个文件是等效的:

Implicit.cs

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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);
}

“规则”摘要:

  • 默认情况下,在classstructenumdelegateinterface中直接定义的类型是internal
  • 成员(方法、构造函数、属性、嵌套类型、事件)默认为private,但有两个例外:
    • 运算符重载必须显式地标记为public static。如果不提供显式的public访问修饰符,您将得到编译错误。
    • 接口成员总是public,您不能提供显式访问修饰符。

  • 在C#中,classstruct成员在默认情况下都是private,与C++不同,C++默认为publicclass默认为private
  • protected中,没有任何东西是隐式的protected internalprotected internal
  • .NET支持“友程序集”,其中internal类型和成员在另一个程序集中的代码中是可见的。C#需要[assembly: InternalsVisibleTo]属性来实现这一点。这与C++的friend特性不同(C++的friend允许class/struct列出将访问其private成员的其他类、结构和自由函数)。
票数 13
EN

Stack Overflow用户

发布于 2013-12-17 03:10:07

void意味着将这段代码或过程标识为方法,否则它将不返回任何值。如果您看到任何类型而不是空,则意味着代码或过程的阻塞是一个函数或属性。

这就是方法

代码语言:javascript
运行
复制
private void DoSomething()
{
...code
}

这是函数

代码语言:javascript
运行
复制
private int DoSomething()
{
..code
return 1
}

私有是指方法、函数或属性是,不能访问类外部的,但可以在类本身内调用。

public是指方法、函数或属性是类外部的可访问的,也可以在类本身内调用。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20624950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档