new关键字计算class占用的字节数,并在堆上分配空间。
class 的ctor默认构造函数实现class内部所有成员的默认值赋值;如果你定义了带参构造函数,那么编译器不会自动生成默认构造;假设类要被继承,尽管派生 类实例化按照派生类的带参构造方式实例化,但是对象生成树还是调用基类的默认构造,所以,一个类如果没有默认构造,该类不能被派生。
作用域(变量或者方法):
private:仅在类内部可访问
protected:仅在类及其派生类内部访问
internal:仅在同一个程序集(dll)内可以访问。程序集内可以包含多个命名空间,每个命名空间也可以包含很多类。
protected internal:当前程序集,或者当前程序集内类的派生类中(可以在不同的命名空间内)
我感觉不到和internal有什么区别。
using System
;
namespace DemoConsole
{
public
class ConsoleBasic
{
private
void
MethodPrivate
(){}
//仅在本类内部可见
protected
void
MethodProtected
(){}
//仅在本类和其派生类中可见
internal
void
MethodInternal
(){}
//在本程序集内可见
protected
internal
void
MethodProtectedInternal
(){}
//在本程序集,或本程序集内定义该变量的派生类中可见
protected
string token
;
//="privilege";
internal
string international
;
public
string version=
"4.0"
;
public
void
ShowFormat
()
{
Console
.ForegroundColor = ConsoleColor
.Cyan
;
Console
.BackgroundColor = ConsoleColor
.Blue
;
Console
.
WriteLine
(
"\n{0}:\tC Format {0:C}\tF3 Format {0:F3}\n"
+
"{1}:\t\tN Format {1:N}\tx Format {1:x}\t{1:E}"
,
99989.9876
,
9999
);
/*
99989.9876: C Format ¥99,989.99 F3 Format 99989.988
9999: N Format 9,999.00 x Format 270f 9.999000E+003
*/
}
}
public
class ConsoleExtend:ConsoleBasic
{
public
void
Show
()
{
MethodProtected
();
MethodInternal
();
MethodProtectedInternal
();
base
.version=
"5.0"
;
base
.token=
"low level"
;
//派生类中可以访问基类的protected成员
base
.international=
"US"
;
}
}
}
namespace InternalDemo
{
public
class ClassInOtherNamespace
{
public
void
MethodInOtherNamespace
()
{
DemoConsole
.ConsoleExtend ce =
new DemoConsole
.
ConsoleExtend
();
ce
.version=
"in other namespace"
;
//可以在另一命名空间内直接访问public成员
ce
.international=
"United States"
;
ce
.
MethodInternal
();
//在同一个程序集内internal成员都可以访问;
ce
.
MethodProtectedInternal
();
}
}
}
转载于:https://www.cnblogs.com/flaaash/archive/2011/04/21/2024395.html