C#:方法类型之间的区别[重复]

Posted

技术标签:

【中文标题】C#:方法类型之间的区别[重复]【英文标题】:C# : Difference between method types [duplicate] 【发布时间】:2012-07-28 00:47:39 【问题描述】:

可能重复:What is the difference between Public, Private, Protected, and Nothing?

我有一个问题: 这些方法类型有什么区别?

Static , Public , Internal , Protected , const , void

抱歉,我的问题对专业人士来说可能看起来很尴尬,但我真的很想了解其中的区别,顺便说一下,我搜索并阅读了有关它们的文章,但它们都很大而且描述得不好,我只需要一个很好的例子,所以每次我做一个函数时我都可以做决定,因为我总是从 private void 开始........

【问题讨论】:

可能与***.com/a/2521492/1495442重复 反对票似乎有点苛刻。我也许可以理解close 投票,但这似乎是一个无法理解现有答案的人真诚地提出的问题。我当然对成为公认的答案有偏见:-)因为据我所知,这可能只是有人躲避作业,但我今天要戴上乐观的眼镜。 【参考方案1】:

您的基本方法如下:

[access modifier?] [static?] [return type or void] [name] ([parameters?])

还有一些额外的点点滴滴,但这是你的开始。

访问修饰符

其中一些是访问修饰符,它们控制哪些类可以访问(可以调用)您放置修饰符的任何内容。

// Anyone can call me
public int SomeMethod()  return 1;  

// Only classes in the same assembly (project) can call me
internal int SomeMethod()  return 1;  

// I can only be called from within the same class
private int SomeMethod()  return 1; 

// I can only be called from within the same class, or child classes
protected int SomeMethod()  return 1; 

静态

Static 表示方法/变量由类的所有实例共享。它可以与上面的访问修饰符结合使用。

public class Test

  static int a = 0;
  public int SomeMethod()  a = a + 1; return a; 


Test t1 = new Test();
t1.SomeMethod(); // a is now 1
Test t2 = new Test();
t2.SomeMethod(); // a is now 2

// If 'a' wasn't static, each Test instance would have its own 'a'

无效

void 仅表示您有一个不返回任何内容的方法:

public void SomeMethod() 
 
  /* I don't need to return anything */ 

常量

const表示不能修改变量:

const int LIFE = 42;
// You can't go LIFE = 43 now

【讨论】:

这正是我需要知道的,非常感谢。【参考方案2】:

关键字 publicprivateprotected 和 (protected)internal 被称为 access modifiers 并确定谁可以访问给定的类和/或其成员,这有助于 @987654322 @ 和 abstraction。

存储修饰符(感谢 AVD)static 定义了一个 static 方法、属性或类,const 创建一个常量,void 表示返回类型为“无”。

在开发过程中,通常以private void DoSomething() 开头,并且只有当您可以并且需要从外部访问该方法时,才能增加可访问性。如果您希望它在同一个命名空间中被覆盖,则使用protected。如果您正在编写一个供其他应用程序使用的库(在不同的命名空间中),请将其标记为 public,依此类推。

如果您希望它在某个时候返回某些内容,请将void 更改为适当的类型。所有这些(包括决定何时使某些东西成为静态或恒定的)在大多数基本的 OO 书籍和教程中都有解决,尝试选择一个。

【讨论】:

不! static 被称为“存储”修饰符。【参考方案3】:

这些被称为Access Modifiers

公开

类型或成员可以被同一个中的任何其他代码访问 程序集或引用它的其他程序集。

私人

类型或成员只能被同一类中的代码访问或 结构。

受保护

类型或成员只能被同一类中的代码访问或 struct,或在派生类中。

内部

类型或成员可以被同一程序集中的任何代码访问, 但不是来自另一个程序集。

受保护的内部

类型或成员可以被同一程序集中的任何代码访问, 或由另一个程序集中的任何派生类。

【讨论】:

【参考方案4】:

除了CodeCaster所说的……

void 在声明返回值类型的地方。 void 表示给定方法中没有返回类型。

const 表示类型为constant,将被定义一次,不会被修改。

【讨论】:

以上是关于C#:方法类型之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#中参数/参数之间的区别[重复]

C#接口的隐式和显式实现之间的区别[重复]

在C#中long与int64有啥区别吗

C#中的string[][]和string[,]有啥区别[重复]

C#中的方法与属性-有啥区别[重复]

C#中[,]和[][]的区别[重复]