大学期间我一直在使用public,想知道public, private和protected之间的区别吗?
还有,相对于什么都没有,静态有什么作用呢?
大学期间我一直在使用public,想知道public, private和protected之间的区别吗?
还有,相对于什么都没有,静态有什么作用呢?
当前回答
当前访问修饰符的另一种可视化方法(c# 7.2)。希望这个模式能帮助你更容易地记住它 (请按此图片浏览。)
外内
如果你很难记住两个词的访问修饰符,记住由外而内。
Private protected:外部私有(相同程序集)内部受保护(相同程序集) 保内:保外(同一组件)保内(同一组件)
其他回答
这些访问修饰符指定成员可见的位置。你应该读读这个。以IainMH给出的链接为起点。
静态成员是每个类一个,而不是每个实例一个。
嗯…
静态意味着您可以在没有类实例的情况下访问该函数。
您可以直接从类定义中访问。
Hmm.
参见这里:访问修饰符。
简而言之:
Public使方法或类型从其他类型/类中完全可见。
Private只允许包含私有方法/变量的类型访问私有方法/变量(注意,嵌套类也可以访问包含类的私有方法/变量)。
Protected与private类似,只是派生类也可以访问Protected方法。
“Nothing”是VB。NET等价于null。虽然如果你提到的“nothing”意味着“没有访问修饰符”,那么这要视情况而定,尽管一个非常粗略的经验法则(当然在c#中)是,如果你没有显式地指定访问修饰符,方法/变量声明通常会受到尽可能多的限制。 即。
public class MyClass
{
string s = "";
}
实际上等同于:
public class MyClass
{
private string s = "";
}
当没有显式指定访问修饰符时,链接的MSDN文章将提供完整的描述。
访问修饰符
从learn.microsoft.com:
public The type or member can be accessed by any other code in the same assembly or another assembly that references it. private The type or member can only be accessed by code in the same class or struct. protected The type or member can only be accessed by code in the same class or struct, or in a derived class. private protected (added in C# 7.2) The type or member can only be accessed by code in the same class or struct, or in a derived class from the same assembly, but not from another assembly. internal The type or member can be accessed by any code in the same assembly, but not from another assembly. protected internal The type or member can be accessed by any code in the same assembly, or by any derived class in another assembly.
如果没有设置访问修饰符,则使用默认访问修饰符。所以总有某种形式的访问修饰符,即使它没有设置。
静态修饰符
类上的静态修饰符意味着该类不能被实例化,并且它的所有成员都是静态的。静态成员只有一个版本,不管创建了多少个其封闭类型的实例。
静态类基本上与非静态类相同,但有一个区别:静态类不能被外部实例化。换句话说,不能使用new关键字创建类类型的变量。因为没有实例变量,所以可以使用类名本身访问静态类的成员。
然而,存在一种静态构造函数。任何类都可以有其中一个,包括静态类。它们不能被直接调用,也不能有参数(除了类本身的任何类型参数)。在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。看起来是这样的:
static class Foo()
{
static Foo()
{
Bar = "fubar";
}
public static string Bar { get; set; }
}
静态类通常被用作服务,你可以这样使用它们:
MyStaticClass.ServiceMethod(...);
当前访问修饰符的另一种可视化方法(c# 7.2)。希望这个模式能帮助你更容易地记住它 (请按此图片浏览。)
外内
如果你很难记住两个词的访问修饰符,记住由外而内。
Private protected:外部私有(相同程序集)内部受保护(相同程序集) 保内:保外(同一组件)保内(同一组件)