不定期更新,2017.8.9
一、new
别看new这个修饰符经常用,恐怕很多人都不知道其本质。我们先来看看new修饰符的官方定义:
new 仅允许在嵌套类声明中使用,表明类中隐藏了由基类中继承而来的与类中同名的成员。
看懂了吗?不懂没关系,咱们接着往下看
首先,我定义一个类:
namespace 修饰符概念
{
class new修饰符
{ private string StrName; public string strName
{
get { return StrName; }
set { StrName = value; }
} private int IntPassWord; public int intPassWord
{
get { return IntPassWord; }
set { IntPassWord = value; }
} //上面是俩字段和属性,下面来构造,啊哈哈哈
public new修饰符( )
{
strName = "我是蜀云泉";
intPassWord = ;
}
}
}
这个类里面有两个字段属性,一个构造,构造在new的时候会调用默认的那一个,其中构造的作用就是在new的时候初始化类数据。
控制台代码及结果:
namespace 修饰符概念
{
class Program
{
static void Main(string[] args)
{
new修饰符 vae = new new修饰符();
Console.WriteLine(vae.strName);
Console.WriteLine(vae.intPassWord);
Console.ReadLine();
}
}
}
我的new修饰符这个类写完之后呢他是保存在硬盘中的,和内存没有半毛钱关系(除非这个类里面含有static关键字)。然后在控制台里面你new了一个该类类型的对象vae出来的时候,系统就会在内存中给这个对象vae分配一个该类大小的存储空间出来。就是这样。
二、public修饰符
来看看官方的定义
public 表示不限制对该类的访问
public应该就不用讲了吧,这个用的最多,只要一个成员定义成public之后呢,该类内部可以随意的访问他,其他类也可以随意的访问他,该类被继承之后其子类也可以随意的访问他。通俗的说就是“我的就是大家的,随意拿去用,别客气”
三、protected修饰符
来看看官方的定义
protected 表示只能从所在类和所在类派生的子类进行访问
看着官方的定义就应该明白了,我还是贴上代码吧:
首先我新建一个类:
namespace 修饰符概念
{
class protected修饰符
{
private string StrName; protected string strName
{
get { return StrName; }
set { StrName = value; }
} protected void Start()
{
Console.WriteLine("这是被保护的一个方法");
}
}
}
在控制台里面调用这个类里面的方法试试行不行:
namespace 修饰符概念
{
class Program
{
static void Main(string[] args)
{ protected修饰符 vae = new protected修饰符();
vae. Console.ReadLine();
}
}
}
结果是无法调用的。
接下来看看子类能不能调用:
namespace 修饰符概念
{
class protected类的继承者:protected修饰符
{ public void test()
{
Start();
}
}
}
完全ok啊。
那么接下来我要做一个猜想了,其子类的实例化对象能不能调用这个保护的方法呢?
namespace 修饰符概念
{
class Program
{
static void Main(string[] args)
{ protected类的继承者 vae = new protected类的继承者();
vae.test(); Console.ReadLine();
}
}
}
是可以的。好了,现在能完全了解protected的官方定义了吧。
四、static
static在百度百科里面介绍的已经很详细了,我再叙述一下吧。static分为静态字段和静态方法。存储在全局数据区,所以不占用类的空间大小。
对于一个静态的成员。它的访问原理跟全局变量是一样的。但是它隐身了,一般类人看不到它,但是它又设置了隐身对自己的类可见,那么那个类就可以看到它。
一个全局变量不属于某个类,或某个函数。
一个静态成员对象它属于某个类,但是它只有一个,这个类可以使用它,但是它是也公有财产,不属于某个对象。当你为一个对象分配空间时,不用再另外给它一个空间来放静态成员对象。所以你在sizeof()时,静态对象的大小没有影响。
五、internal
internal的意思就是只能在程序集中访问。
例如下面,命名空间Test下的两个类
namespace Test
{
internal class a
{
public void b()
{
Console.Write("蜀云泉真帅");
}
}
public class Write
{
public void WriteOut()
{
class x = new a();
x.b();
}
}
}
现在我外部想调用这个类里面的方法:
//可以这么访问
Test.Write x = new Test.Write();
x.WriteOut();
//但不可以这么访问
Test.a x = new Test.a();
x.b();
这就是internal的功能,只能在程序集中访问。
六、sealed
sealed是禁止继承的修饰符,例如类A定义了sealed,那么类A就不能被继承,同样,可以用在虚方法,虚属性上面。总之,就是防止被继承。