小白的《C#图解教程》学习笔记(第四章)
唠唠嗑
嗨,我是小白,如果你不喜欢看一整本书而是带着轻松的心情看别人学习一本书,或者喜欢通过和人讨论的模式来进行学习,就来关注我吧。
如果有比我还小白的小白们有非常非常基础的问题要问,我会根据私信人数出期特别的,简单易懂的教程哦。
鉴于上期的内容有点多,笔记还是一章一章的整理吧。
总目录
这是这本书的目录( ̄▽ ̄)~*
本文章的阅读目录
一、C#的一些注意点
1.关于声明变量时的一些注意点
同一行声明多个变量的语法细微差别:
int a, int b = 0;
int c,d = 0;
a这种情况并没有被手动赋值,虽然它最后的值也是0,但那是缺省默认值,当变量没有被赋值且对应类型在该情况下会默认赋上的值,称为缺省默认值。
而c,d这种情况就是被同时手动赋值为0。
但要注意,同一行不能声明多个不同类型的变量,如下这种:int a,string b="111";
2.关于返回类型的注意点
C#中没有默认的返回类型,所有的方法都必须包含返回类型或void。
顺便一提,C#中没有放在类声明外部的“全局函数”。
3.关于类类型变量的注意点
当定义一个类类型变量,系统会为该变量的引用和实际数据分配内存,假设你定义的类的名字是Me。
Me m;
这条语句只是创建了叫做m的变量的一个引用,而且它没有初始化,在堆里没有数据。
当使用new的时候,才会在堆里产生对应的数据。
Me m = new Me();不要忘记在new后面加上**类名()**的形式。
4.关于实例和静态成员的注意点
首先解释下成员是什么,通常是指类里声明的变量(也就是字段)和方法(被称作成员方法),如:
class A{
public int a;
public static int b;
public int Abc(){...};
}
实例,就是该类的实例,即该类的对象(new出来的对象),实例成员即只在各个实例中独立的成员,实例修改实例成员的值不会影响到其他实例中的实例成员的值。
比如用之前定义的A类举例:
A a1 = new A();
A a2 = new A();
a1.a = 1;
a2.a = 2;
因为A类里的a成员,是实例成员,所以a1.a和a2.a都分别独立,a1.a的值是1,a2.a的值是2。
但如果是:
A a1 = new A();
A a2 = new A();
a1.b = 1;
a2.b = 2;
结果会是a1.b和a2.b的值都是2,因为b加了static关键字,是静态成员,它和实例不相关,它的作用对象是类,而不是实例,所以使用类作为模板创建出来的所有实例都会受到影响。
二、访问修饰符
1.C#的五种访问修饰符
- 私有的(private);
- 公有的(public);
- 受保护的(protected);
- 内部的(internal);
- 受保护内部的(protected);
这一章只介绍了私有访问和公有访问,在第七章有讲剩下的。
私有访问和公有访问
即只有在类里面才能访问的成员,比如:
class B{
int a=0; //隐式私有访问
private int b=0; //显式私有访问
public int c=0; //公有访问
public void Abc(){
return a+b;
}
private void Abd(){
return a+b+c;
}
}
class C{
B b1 = new B();
B b2 = new B();
int me = b1.c;//不会出错,c是B类的公有成员
int you = b1.a; //这个不行,a只能在B类内部被访问,因为是私有成员。
int he = b2.Abc();//可以,因为Abc()是公有成员
int sh3 = b2. Abd();//不可以,因为Abd()是私有成员
}
看完上面的代码,你可能会有一些问题,譬如:
Q:隐式私有访问和显式私有访问的这个隐式和显式有什么区别?
- A:没有区别,只是需要注意的是不加修饰符的成员就是私有成员,和带private的效果是一样的,这或许和其他语言不一样,比如Java的默认修饰符是友好的而不是私有的。
Q:为什么Abc()里的a和b都是私有访问成员,却可以访问Abc()?
- 因为Abc()是公有访问成员,它虽然访问了私有访问成员,但却是在私有访问成员所在的A类内部访问的,所以没有问题。
Q:函数不加private也是私有访问成员吗?
- 是的。
小结
能够给你帮助是我最大的荣幸,祝你早日吸收掌握想学的知识。