C#基础篇七类和静态成员
1.new关键字做的4个事情
1.1 开辟堆空间
a.开辟多大的空间呢?
当前类 所有的 成员变量类型所占空间的总和 + 类型指针(方法表的地址)
b.开辟了空间干什么用呢?
存放 成员变量
1.2 创建对象
a.将对应类型 中的 实例成员模板区 里的 实例变量 复制到 堆空间空间中;
b.将 对应类型 的 方法表地址 设置 对象!
1.3 调用构造函数
a.将 前面创建 的对象 的堆地址,先传给 构造函数里的 this!
b.再 执行 构造函数里的代码!
1.4 返回堆地址
2.静态成员 和 实例成员的区别
2.1静态成员
加载:是当程序 第一次遇到 某个类的时候,进行 类型加载;加载中就会 创建该类的类型 和方法表,在类型中就会将 静态成员 保存到 静态成员区中;
访问:通过 类名.静态成员:Dog.dogNum++;
2.2实例成员
加载:是通过 new关键字 创建对象的时候加载的!
访问:通过 对象名.实例成员: Dog d =new Dog(); d.name="小白";
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace P01MethodOverload
- {
- class Program
- {
- static void Main(string[] args)
- {
- //1.方法重载:方法名相同 + 参数不同(个数 或 类型) ,和 返回值无关!
- //1.1 同一个类中 不允许出现 方法名 和 参数(参数的类型和个数,与参数名无关) 完全一样的 两个方法
- //1.2 但是 允许 出现 方法名相同,但是 参数 的 【个数 或 类型】 不同 的多个方法 同时存在!-- 这个机制就叫做【方法重载】!
- Console.WriteLine("哈哈哈哈");
- Console.WriteLine(123123);
- Console.WriteLine(true);
- }
- static int SayHi(string strName)
- {
- return 1;
- }
- static int SayHi(string strName,int age)
- {
- return 1;
- }
- static int SayHi(int strPwd)
- {
- return 1;
- }
- /// <summary>
- /// 1.1 求和 2个数
- /// </summary>
- /// <param name="x"></param>
- /// <param name="y"></param>
- /// <returns></returns>
- static int Add(int x, int y)
- {
- return x + y;
- }
- /// <summary>
- /// 1.2 求和 3个数
- /// </summary>
- /// <param name="x"></param>
- /// <param name="y"></param>
- /// <param name="z"></param>
- /// <returns></returns>
- static int Add(int x, int y, int z)
- {
- return x + y + z;
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace P02OOP
- {
- class Program
- {
- static string aaa="123";
- static void Main(string[] args)
- {
- /*1.类
- * 1.1 语法: class 类名 { }
- * 1.2 作用 a.【分类】-为程序里的 各种 变量 方法 做分类!
- * 怎么分类呢? - "名词提炼法";
- * 类里放什么呢? - 放 数据(全局变量) 和 方法;
- * 1.3 作用 b.【复用】-复用代码结构 和 方法
- */
- //1.2.1 类之间的调用
- //a.如果 被 访问类 的 成员 或 方法 被 static 修饰的话,则直接通过 类名.成员 的方式来访问
- //1.3关于类的加载: 当程序执行某个方法时,会优先将 方法里的 第一次遇到的所有的 类 都加载到内存中;然后再 由上至下 的 执行 方法里的代码!
- Console.WriteLine("begin");
- Test();
- Console.ReadLine();
- }
- static void Test()
- {
- Dog.type = "苏格兰牧羊犬";
- Dog.sex = false;
- Dog.age = 1;
- Dog.Bark();
- Cat.name = "";
- }
- }
- /// <summary>
- /// 犬 类
- /// </summary>
- class Dog
- {
- /* 类的成员 都有 访问修饰符:
- * a.私有成员,private:凡是私有成员,只能 在当前类中被访问! -- 类的所有成员 默认都是 private
- * b.公有成员,public :可以在类中 或 类的外部 访问!
- */
- //private static string type;
- public static string type=Console.ReadLine();
- public static int age;
- public static bool sex;
- public static void Bark()
- {
- Console.WriteLine("汪汪~~~~~" + Dog.type);
- }
- static void Pee()
- {
- Console.WriteLine("对着电线杆尿尿~~~~~~~~~");
- }
- }
- class Cat
- {
- public static string name = Console.ReadLine();
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace P03Object
- {
- class Program
- {
- /// <summary>
- /// 类 和 对象
- /// </summary>
- /// <param name="args"></param>
- static void Main(string[] args)
- {
- /* Dog d1 = new Dog()
- * 等号左侧 叫生成 Dog类的【变量】! 在 栈 中开辟空间,存放 =号右边创建的堆空间地址
- * 等号右边 叫做创建(实例化) Dog类的 【对象】!在 堆 中开辟空间,在堆中存放 实例成员
- */
- Dog d1 = new Dog("小白", 1, false);
- //d1.name = "小白";
- //d1.age = 2;
- //d1.sex = false;
- d1.Bark();
- Dog.dogNum++;
- Dog d2 = new Dog("小黑", 2, true);
- //d2.name = "小黑";
- //d2.age = 3;
- //d2.sex = true;
- d2.Bark();
- Dog.dogNum++;
- Console.ReadLine();
- }
- }
- class Dog
- {
- /* 在类中,没有被static修饰 叫做 【实例成员】
- * 实例成员的访问方式,是通过 【对象】.【实例成员】
- */
- public string name;
- public int age;
- public bool sex;
- public static int dogNum = 0;
- /* 构造函数:无返回值类型,并且 方法名 必须 和 类名一致!
- * 只能被new关键字调用
- */
- public Dog(string name1,int age1,bool sex1)
- {
- this.name = name1;
- this.age = age1;
- this.sex = sex1;
- }
- public void Bark()
- {
- Console.WriteLine("汪汪~~~我是一只小狗狗,叫做{0},年龄{1},性别{2}", name, age, sex);
- }
- }
- }
C#基础篇七类和静态成员的更多相关文章
- C++基础知识:类的静态成员
1.普通成员变量通过对象名能够访问public成员变量每个对象都可以有只属于自己的成员变量成员变量不能在对象之间共享 2.从命名空间的角度:类的静态成员只是类这个命名空间中的全局变量和全局函数不同之处 ...
- Lua 学习之基础篇七<Lua Module,Package介绍>
Lua 之Module介绍 包管理库提供了从 Lua 中加载模块的基础库. 只有一个导出函数直接放在全局环境中: [require]. 所有其它的部分都导出在表 package 中. require ...
- 新年在家学java之基础篇-高级类的特性
继承 extends 子类的共性代码都是继承自父类的,每个子类只要写自己特有的代码 class 子类 extends 父类 继承提高了代码的复用性,提供了多态的前提,但是不要为了某个功能去继承 子类不 ...
- 【Unity|C#】基础篇(3)——类(class)/ 接口(interface)
[学习资料] <C#图解教程>(第4~7章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu ...
- JAVA基础篇 之 类的初始化
类中属性的隐式初始化,代码如下,我们看下不同类型默认的初始值是什么 创建一个Demo类如下: class Demo { int a; byte b; short c; long d; boolean ...
- 【Java_多线程并发编程】基础篇—Thread类中start()和run()方法的区别
1. start() 和 run()的区别说明 start()方法: 它会启动一个新线程,并将其添加到线程池中,待其获得CPU资源时会执行run()方法,start()不能被重复调用. run()方法 ...
- Linux基础篇七:Linux的命令执行
首选区分内置命令和外置命令: 内置命令:shell程序自带的命令,系统内核一启动就可以使用的命令 外置命令:在系统PATH变量路径下的命令 如何查看一个命令是内置命令还是外置命令: type -a c ...
- 基础篇七:默认配置语法(/etc/nginx/nginx.conf)
首选我们 vim nginx.conf 参照上图,我们看看nginx.conf 的个参数含义 我们再看看 /etc/nginx/conf.d/default.conf
- 图解Python 【第五篇】:面向对象-类-初级基础篇
由于类的内容比较多,分为类-初级基础篇和类-进阶篇 类的内容总览图: 本节主要讲基础和面向对象的特性 本节内容一览图: 前言总结介绍: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 ...
随机推荐
- VS2008 + QGIS1.7.1试验
今天试验了一下.结果算是成功了吧.显示Generate done,生成了.但是提示了一个“SVN version不明确”的错误提示,应该无大碍吧.但是打开Build成的.sln也没看出有啥不妥. 用C ...
- 使用freemarker导出word
最近需要将jsp部分页面导出为word文件,环境是Spring+SpringMVC+Hibernate. 我使用的是FreeMarker模板引擎来完成.这是FreeMarker的中文参考手册,感兴趣的 ...
- docker mac
官网上有安装方法.已安装成功. 容器千万不能随便删 现在已经不用boot2docker,使用dockertools来安装docker,dockertools中包含docker-machine,等等. ...
- java基础知识-二进制
1.二进制<0B>出现的原因 2. 八进制<0>和十六进制<0X>出现的原因:简化书写和记忆 3.十进制到其他进制的转换方法 method:除以进制数,直到商为0, ...
- hdu4048
题意:给定m个数,还有n,n表示有一个长度为n的环,现在要求从M个数中选出若干个数,要求选出的数最大公约数为1,填充在n个位置中,选出的数可以重复,求多少种种方案.旋转当成一样的 . 思路:假设现在选 ...
- 右键在目录当前打开命令行cmd窗口
Win7系统大家习惯“Win+R”的组合键打开命令提示符. 方法/步骤2 通常情况下,我们点击鼠标右键是没有命令行选项的. 方法/步骤3 在桌面上先按住Shift键,然后鼠标右键,出现选项“在此处打开 ...
- Apache中 RewriteCond 规则参数介绍
RewriteCond指令定义了规则生效的条件,即在一个RewriteRule指令之前可以有一个或多个RewriteCond指令.条件之后的重写规则仅在当前URI与Pattern匹配并且满足此处的条件 ...
- cnblogs第一篇文章
大家好,以后我就在这里很多交流分享了!谢谢!
- ASP.Net MVC OA项目笔记<四>
1.1.1 EF线程唯一 在数据层中用到了EF的实例,在数据会话层也用到了,所以在一个请求中只能创建一个EF实例(线程内唯一对象),把它封装成工厂类 1.1.2 为了防止相互引用,循环引用,所以这个工 ...
- 4.翻译:EF基础系列--EF架构
原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...