《C#入门详解》刘老师 初识类与名称空间&类,对象,类成员简介
初识类与名称空间
一、如果我们写一个类,没有把这个类的名称空间是哪个标出来的时候,就从引用的名称空间里检索,看到哪个名称空间里有这个类;
1.Using把名称空间引用进来;
2.一个solution里可以有多个项目(Project);
3.名称空间就是以树形结构组织类;
4.我们编写了一个类“program”放在“namespace helloworld”这个名称空间里,意思是我自己写了一个类,当别人调用我们这个类的时候,可以从我们的名称空间里找到这个类。
namespace helloworld { class program { static void main(string[] args) { System.console.writeline("hello , world!"); } } }
using system; namespace helloworld { class program { static void main(string[] args) { /* System.console.writeline("hello , world!"); */ console.writeline("hello , world!"); } } }
二、类库的引用
-
类与名称空间放在类库里,类库引用是使用名称空间的物理基础(类库也叫程序集Assembly)
-
对类库的引用有两种方式:1、DLL引用(黑盒引用,无源代码)NuGet简介 2、项目引用(白盒引用,有源代码)
1.黑盒引用可以在对象浏览器里看到有里面有哪些类,一般配合文档使用相应的类
类,对象,类成员简介
一、类与对象的关系
-
对象也叫实例,是类经过“实例化”后得到的内存中的实体
1.对象和实例是一回事
2.有些类是不能实例化的,比如“数学”,我们不能说一个“数学”
-
依照类,我们可以创建对象,这就是“实例化”
1.现实世界中常称“对象”,程序世界中常称“实例”
2.例子:(集合的关系)
人是一个类 有身高 年龄 属性
公交车是一个类 有乘客 座椅 属性
人就相当于公交车中的 乘客
人就是一个属性
车里装的人 又有年龄属性
-
使用new操作符创建类的实例
1.实例化过程就是创建一个对象,关键词“new”。类是不占内存的,但是创建一个对象后,会开辟一个内存。
-
引用变量与实例的关系
1.孩子与气球
2.气球不一定有孩子牵着
3.多个孩子可以使用各自的绳子牵着同一个气球,也可以都通过一根绳子牵着气球
Form /*一个类*/ new Form(); /*一个Form类的实例就创建了;圆括号表示的意思当这个实例诞生后,用什么样的方法去对它进行初始化,叫做构造器*/ (new Form()).showDialog(); /*创建完了一个实例,然后调用它的方法*/ (new Form()).showDialog(); (new Form()).Text = "My Form"; /*这边是创建了两个实例,第一个实例是展示,第二个实例是有一个title*/ Form myForm; myForm = new Form(); myForm.Text = ''My Form''; myForm.showDialog(); /*引用变量连续的操作同一个实例,这里能显示title也能展示*/
Form myForm1;
Form myForm2;
myForm1 = new Form();
myForm2 = myForm1;
myForm1.Text = "My Form";
myForm2.ShowDialog();
/*多个孩子可以使用各自的绳子牵着同一个气球,这边的两个引用变量引用的是同一个实例*/
二、类的三大成员
-
属性
1.存储数据,组合起来表示类或对象当前的状态
-
方法
1.由C语言函数进化来,表示类或对象“能做什么”
-
事件
1.类或对象通知其他类或对象的机制,为C#所特有(Java通过其他办法实现这个机制)
2.善用事件机制非常重要
-
某些特殊类或对象在成员方面侧重点不同
1.模型类或对象重在属性,如Entity Framework
2.工具类或对象重在方法,如 Math , Console
3.通知类或对象重在事件,如各种Timer
-
Notice--一个例子
A类中直接实例化B类,然后调用B类的方法不行吗?
{
//初始化仓库
CangKu ck = new CangKu();//为什么在下边用ck .不出方法来,但是在SuperMarket的构造函数里就可以???????
public SuperMarket()
{
ck.DaoRuGoods("Acer", 1000);
ck.DaoRuGoods("IPhone", 1000);
ck.DaoRuGoods("Cannoon", 1000);
ck.DaoRuGoods("CocaCola", 10000);
}
}
QUESTION:
如代码所示,我直接在实例化后边用ck .不出方法来,是怎么回事?
ANSWER:
要调用B实例的方法要在A的方法里,不能直接在类里调用。
三、静态成员与实例成员
-
静态成员在语义上表示它是“类的成员”
-
实例(非静态)成员在语义表示它是“对象的成员”
-
绑定指的是编译器如果把一个成员与类或对象关联起来
1.不可小觑的“ . ” 操作符------成员访问