`

传智播客.net培训408学习笔记

阅读更多
这几天在主要学习C#语法。
给我们上c#基础加强课程的是蒋坤老师,讲课很细致,可以感觉到他备课很认真。
他也很负责,很多次说知识点很零碎,大家要多练习。
今天讲主要讲了类的组成,在值类型和引用类型的区别中讲的非常详细,
之前自己一直都分不清堆和栈值参之类的关系,蒋老师还读取内存中的数据给我们看
印象很深,对底层的数据有了更深的理解

类属性其实是方法,一个Get方法,一个Set方法。属性可以控制输入和输出

判断两个类是否是继承关系:对象 is 父类; 返回一个布尔值

结构体是值类型,不具备面向对象的特征

internal 表示只能在本程序集中访问。作为类库,项目外不能直接访问

子类中base.name实用base表示指定调用父类的成员
class Person
{
    public Person(x,y)
     {}
     public Person(x):this(x,y)
      {}
}
这样的语法用于构造函数调用自身函数

值类型只需要一段单独的内存,用于存储实际的数据。
引用类型需要两段内存:
第一段存储实际数据,总是位于堆中
第二段是一个引用,指向数据在堆中的存放位置
引用类型有:object string class interface delegate array

如果没有初始化语句,字段的值会被编译器设为默认值。总结起来,每种类型的默认值都是 0,bool型是false,引用类型为null

声明类型的变量所分配的内存是用来保存引用的(所以声明时仅在栈中分配内存)。要为十几数据分配内存,需要使用new运算符

var关键字并不是某种特别类型的符号。只是句法上的速记,表示任何可以从初始化的右边推断出的类型
var:
只能用于本地变量,不能用于变量;
只能在变量声明中包含初始化时使用
一旦编译器推断出类型,它就是固定且不能更改的

常量在声明中必须初始化,常量在声明后不能改变。

类中,可以在任何时候使用return; 返回语句退出方法。只能用于声明为void类型的方法

使用值参数,数据通过复制实参的值到形参的方式传递到方法。方法被调用时,系统做如下操作:
1.在栈中为形参分配空间
2.复制实参到形参

一个值参的实参不一定是变量。可以是任何能计算成相应数据的表达式
float value=(func(k+j)/3);

方法中的ref引用参数:
1.不在栈中为形参分配新的内存
2.形参的名称相当于实参变量的别名,引用与实参相同的内存位置

一个类中可以有一个以上的方法拥有相同的名称,叫做方法重载

静态字段被类的所有实例共享,所有实例都访问同一内存位置。因此如果该内存位置的值被一个实例改变了,这种改变对所有的实例都可见。
静态成员也可以使用点运算符从类的外部访问。但因为没有实例,所有必需使用类名
class D{static int mem;} D.mem=5;
实例成员在实例被创建时开始存在,当实例被销毁时停止存在。然而静态成员即使没有类的实例也存在并可以访问。
1.静态函数成员不能访问实例成员。能访问其他静态成员
2.即使没有类的实例,仍然可以调用静态方法

与静态成员不同,常量没有自己的存储位置,而是在编译时被替换。类似于c和c++的#define

和字段不同,属性是一个函数成员
1.它不为数据存储分配内存
2.它执行代码
属性是指定的一组两个匹配的,称为访问器的方法(set访问器,get访问器)
两个访问器中只是有一个必须定义,否则会报错
属性并非必须和字段关联,例:
class RightTriangle
{
public double a;
public double b;
public double hypotenuse{get{return math.sqrt((a*a+b*b))}}
}
hypotenuse的返回值基于另外两个边的长度。它没有存储在字段中。它在需要事根据A和B的值计算正确的值
另一个属性不与字段关联的例子是属性和数据库中的值关联
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics