从C++到C#,发现C#写多了里面有些知识和C++混淆了,记下来理一理。
1、C++的类定义不会在class关键字前使用访问修饰符,即不会有public class Base {…}这种定义,而C#有。
C#的访问修饰符除了用于修饰member外还用于修饰type,其访问修饰符除了有和C++一样的public、protected和private外,还有internal和protected internal。
public:访问不受限制。
protected:访问仅限于包含类和包含类的派生类。
private:访问仅限于包含类。
internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集和包含类的派生类。
修饰type时,如果是top-level types(没有被其它类型嵌套包含)只能使用public和internal,默认是internal。
如果是nested types则访问修饰符的情况有以下情况:
class默认修饰符是private,可以使用public、protected、private、internal、protected internal。
interface默认修饰符是public,只能使用public。
struct默认修饰符是private,可以使用public、private、internal。
enum默认修饰符是public,只能使用public。
当定义一个类型时需要考虑它的可访问级别是否依赖于其它类型或成员。例如一个基类的可访问级别最低要和派生类一致:
class BaseClass {…}
public class MyClass: BaseClass {…} // Error
上面的代码因为BaseClass的可访问级别internal低于MyClass的public编译器会报错。
参考:https://msdn.microsoft.com/zh-cn/library/wxh6fsc7.aspx
2、C++没有静态类,即不会有static class Base {…}这种定义,而C#有。
C#静态类中的成员变量和函数必须都是static的。它不能被继承,不能实例化,不能有实例化的构造函数,但可以有静态构造函数。
参考:http://blog.csdn.net/xiaobai1593/article/details/7278014
https://msdn.microsoft.com/zh-cn/library/98f28cdx.aspx