我有一个问题:这些方法类型有什么区别?
Static , Public , Internal , Protected , const , void
抱歉,我的问题对专业人士来说可能看起来很尴尬,但我真的很想了解其中的区别,顺便说一下,我搜索并阅读了有关它们的文章,但它们都很大而且没有很好的描述,我只需要一个很好的例子,这样我就可以做每次我做一个函数时都会做出决定,因为我总是从私有 void 开始......
我有一个问题:这些方法类型有什么区别?
Static , Public , Internal , Protected , const , void
抱歉,我的问题对专业人士来说可能看起来很尴尬,但我真的很想了解其中的区别,顺便说一下,我搜索并阅读了有关它们的文章,但它们都很大而且没有很好的描述,我只需要一个很好的例子,这样我就可以做每次我做一个函数时都会做出决定,因为我总是从私有 void 开始......
您的基本方法如下:
[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
关键字public
、private
和protected
( protected
)internal
被称为访问修饰符,它们确定谁可以访问给定的类和/或其成员,这有助于封装和抽象。
存储修饰符(感谢 AVD)static
定义了一个静态方法、属性或类,const
创建一个常量并void
指示返回类型为“无”。
在开发过程中,通常以 开头private void DoSomething()
,并且只有当您可以并且需要从外部访问该方法时,才能增加可访问性。如果您希望它在同一个命名空间中被覆盖,您可以使用protected
. 如果您正在编写一个库以供另一个应用程序(在不同的命名空间中)使用,则标记它public
,依此类推。
如果您希望它在某个时候返回某些内容,请更改void
为适当的类型。所有这些(包括决定何时使某些东西成为静态或恒定的)在大多数基本的 OO 书籍和教程中都有解决,尝试选择一个。
这些被称为Access Modifiers
上市
类型或成员可以由同一程序集或引用它的另一个程序集中的任何其他代码访问。
私人的
类型或成员只能由同一类或结构中的代码访问。
受保护
类型或成员只能由同一类或结构中的代码或派生类中的代码访问。
内部的
类型或成员可以由同一程序集中的任何代码访问,但不能从另一个程序集中访问。
受保护的内部
同一程序集中的任何代码或另一个程序集中的任何派生类都可以访问该类型或成员。