C#笔记

命名空间

名称空间下拥有多个类,不同的命名空间,类名可以相同,若引用两个命名空间A和B,
里面都有类m,若使用类m,则需要将全名写出来。

变量

成员变量与局部变量的区别

1、位置不同

成员变量:在类中方法外面,存在堆中

局部变量:在方法中声明的变量,存在栈中

2、生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失

3、初始值

成员变量:有默认初始值

局部变量:没有默认初始值,使用之前需要赋值
1.引用类型变量的声明与实例化
值类型 (ing ,byte,short ,等)无需实例化,声明赋值即可

class Program
    {
        static void Main(string[] args)
        {
            Form f1;   //变量的声明,并不会分配内存空间,只有一个指针
            Form f2;
            f1 = new Form(); // 实例化  (分配内存空间)
            f1.Text = "你好";   //赋值给f1
            f2 = f1;                 //将f2也与内存链接
            f2.Text = "再见";   //此时“再见 ”替代“你好”,但是f1,f2仍旧指向被分配的内存空间
            f1.ShowDialog();
            f2.ShowDialog();  //结果都是”再见“
        }
    }

2.字段与属性
字段和和属性,属性是对字段初始值的约束,

student sd = new studengt();
age =10;
    class student {
			int age  ;
}`

若对age变量不进行约束,外界实例化时,使用age会给age赋不合理的值age = -1;

                                         **静态类**

调用方式:-----静态类名.静态方法 ();

1.在静态类中只能访问静态成员;
2.在静态类中只能有静态成员;

静态类的主要特性:
1:仅包含静态成员。
2:无法实例化。
3:是密封的。
4:不能包含实例构造函数。

静态成员
1:非静态类可以包含静态的方法、字段、属性或事件;
2:无论对一个类创建多少个实例,它的静态成员都只有一个副本(体现在在A实例改变了某个静态变量的值将影响所有的实例);
3:静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量;
4:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;
5:虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,不属于类的实例。因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段;
6:C# 不支持静态局部变量(在方法内部定义静态变量)。

                                  **非静态类**

非静态类里即可有静态成员,也可以有非静态成员。
非静态里的静态方法可直接调用即 :< 非静态 类名.静态方法 >
非静态里的非静态方法需要实例化后才能被调用,格式:< 非静态类名 变量=new 非静态类名();>

                               **静态类和非静态类的区别:**

非静态类是储存有状态的一类操作过程,例如语言包的非静态类,声明了之后,可能获取语言的种类,语言元素和一些附加的东西。
静态类可以视为类库里都是单一的过程,不存在“状态”的概念,就可以使用静态类。
非静态类可以包含静态方法,但静态类不能包含非静态方法。
使用选择:
当定义的类不需要进行实例化时,我们使用静态类;如果需要实例化对象,需要继承等特性时,应该使用非静态类,并且将统一使用的变量和方法设为静态的,那么所有实例对象都能访问。
效率
静态方法的使用效率比非静态方法的效率高。
按照上面的概念,只要内存够用,都可以使用静态的。使用静态方法会带来什么问题呢
线程安全
静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。
非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

静态方法和非静态方法

(1)一个非静态类中,访问修饰符public或者private都行
静态方法,直接调用----类名.方法名();
非静态方法,实例化后调用。
(2)一个静态类中
静态方法直接调用-----类名.方法名();
(3)一个类A要调用另一个静态类类B中的方法(B的访问修饰符 要求public)
静态方法,直接调用 —类名.方法名();
(4)一个类A要调用另一个非静态类类B中的方法(B的访问修饰符 要求public)
静态方法,直接调用 —类名.方法名();
非静态方法,实例化调用

静态方法和非静态方法的区别:
1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用;
2.静态方法只能访问静态成员和方法,非静态方法都可以访问;
3.静态方法不能标记为override,导致派生类不能重写,但是可以访问;
4.静态成员是在第一次使用时进行初始化。非静态的成员是在创建对象的时候,从内存分配上来说静 态 是连续的,非静态在内存的存储上是离散的,因此静态方法和非静态方法,在调用速度上,静态方法速度 一定会快点,因为非静态方法需要实例化,分配内存,但静态方法不用,这种速度上差异可以忽略不 计

何时用静态方法,何时用实例方法:
1.一个方法和他所在类的实例对象无关,不依赖new出来的实例,那么它就应该是静态的
2.不需要面向对象的理念的时候用静态;比如动物-> RUN ,因为你可能会扩展出猫 run、狗 run,这时候就 需要用非静态的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值