结构体与类(静态类、抽象类)学习
来源:互联网 发布:云计算安全问题实例 编辑:程序博客网 时间:2024/06/03 18:06
类:
1、类规定了能够存储的数据类型,能够执行的方法、能够完成的任务;
2、类定义是一个说明,保存在类文件中;
3、类是引用数据类型。
对象:
1、对象在内存中;
2、对象以类为模板,通过对象使用类中的规定的数据类型、方法;
3、对象属性使用:对象名.属性名(get、set方法);
4、对象方法使用:对象名.方法名;
5、对象通过属性获取对应字段的值或者给字段赋值。(外界可通过属性访问私有字段)
结构体和类的区别:
1,结构是值类型(Value Types),类是引用类型(Reference Types)。
2,结构使用栈存储(Stack Allocation),类使用堆存储(Heap Allocation)。
3,所有结构成员默认Public,类的变量和常量默认Private,不过其他类成员默认都是Public。
4,结构成员不能被声明为Protected,类成员可以。
5,结构变量声明不能指定初始值、使用New关键字对数组进行初始化,类变量声明可以。
6,结构不能声明默认的构造函数,即不拥有参数的非共享构造函数,类可以。
7,二者都可以拥有共享构造函数,结构的共享构造函数不能带有参数,但是类的共享构造函数则可以带或者不带参数。
8,结构不允许声明析构函数(Destructor),类可以。
9,结构的实例(Instance)声明,不允许对包含的变量进行初始化设定,类可以。
10,结构是隐式继承自ValueType类,而且不能继承任何其他类型,类可以继续自ValueType以外的任何类。
11,结构不需要构造函数,类需要构造函数。
(一)结构体:
struct 结构体名{
访问修饰符 类型 变量名;
...
访问修饰符 类型 变量名;
}
using System; namespace lesson01{ struct Person { public string name; //public 类型 变量名,在结构体中不可以设置初始值} struct Point2 { public float x; public float y; } class MainClass { public static void Main ( string[] args ) { Person p; //使用结构体成员,结构体类型变量.成员名 p.name="苏利文"; Console.WriteLine ( p.name ); Point2 p1; p1.x = 2.5f; p1.y = 1.0f; Console.WriteLine ("P({0}, {1})",p1.x,p1.y); } }}
(二)类:
[访问修饰符] class 类名 {
类的描述信息}
使用new关键字进行初始化
类名 变量名 = new 类名();对象——类实例化的结果
字段(变量)
public 数据类型 字段名;
赋值:对象名.字段名=值;取值:对象名.字段名
using System;namespace Lesson01 {public class Person {//定义一个类 //字段——用于描述类中的特征 //在类中,可以给字段设置初始值 //public string name = “Mike”; public string name; } class MainClass { public static void Main ( string[] args ) { //声明一个变量p,p即对象,使用new进行初始化 //实例化——使用类创建出对象的过程 Person p = new Person () ; //对象.字段名——访问类中的字段; p.name = "Mike"; } }}
①静态类:
1、静态构造方法不能有参数和访问修饰符;
2、静态构造方法可以存在于普通类或静态类中;
3、静态构造会在第一次实例化或调用静态成员时调用。
堆区——程序员手动开辟并管理内存
栈区——系统自动完成内存管理
静态区(全局区)——程序运行过程中,内存中的数据一直存在
常量区——存放常量
代码区——存放程序运行所需要的代码
using System;namespace Lesson01 {//静态类中,只能包含静态的成员(字段,属性,方法),常量 public static class A { //静态字段 public static int i; //静态构造方法//静态构造方法不允许添加访问修饰符//静态构造方法会在首次访问类中的静态成员时调用static A () { Console.WriteLine ("A 的静态构造方法"); } //静态方法 public static void Test () { Console.WriteLine ("test"); } } public class B { //静态方法也可以在普通类中 static B () { //静态构造方法会在创建对象并初始化之前调用 Console.WriteLine ("B 的静态构造方法"); } } class MainClass { public static void Main ( string[] args ) { // 使用类名调用静态成员,不能通过实例调用 A.i = 10 ; Console.WriteLine (A.i); A.Test () ; B b = new B () ; } }}
②抽象类:
1、抽象类用于描述所有子类的共同特性,仅仅为了表达抽象概念,不与具体事物相联系;
2、抽象类不能被直接实例化;
3、抽象类只声明不实现,但是在子类中必须全部实现;
4、抽象类中可以包含非抽象方法,抽象方法只能写在抽象类中;
5、抽象方法不能使用Private访问权限修饰符。
using System;namespace Lesson01 {public abstract class Food { //抽象方法需要添加abstract关键字 public abstract void Eat () ; //父类中定义的抽象方法不能被实现 public void Test () { //抽象类中可包含普通方法 Console.WriteLine ("Test"); } } public class Apple : Food { public override void Eat () { //子类实现父类的抽象方法,需添加override Console.WriteLine ("HP + 10"); } } public class Water : Food { public override void Eat () { Console.WriteLine ("MP + 10"); } } class MainClass { public static void Main ( string[] args ) { Food f1 = new Apple () ; Food f2 = new Water () ; //Food f =new Food () ;抽象类不能被直接实例化; f1.Eat () ; f2.Eat () ; f1.Test () ; } }}
阅读全文
0 0
- 结构体与类(静态类、抽象类)学习
- 抽象类与结构,装箱拆箱
- 静态内部抽象类
- 静态内部抽象类
- 静态、抽象类、接口
- Java关键字static,abstract,instanceof使用(静态属性,静态方法,抽象类抽象方法的学习)
- C++抽象编程——面向对象(2)——结构体与类
- 静态类 抽象类 静态方法等等
- C#静态与非静态 类,成员、结构
- 关于抽象类与静态类的初步了解
- 静态类,抽象类,接口
- Java(抽象类与抽象方法)
- C#类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
- java学习笔记7--抽象类与抽象方法
- C#回顾学习笔记三十一:抽象类与抽象方法
- 抽象类与抽象方法
- 抽象函数与抽象类
- 抽象类与抽象子类
- MySQL索引总结
- 自定义View之线性百分比进度条
- 【剑指offer】二叉搜索树转换为有序双向链表。要求不创建新节点。只改变指向。
- 用Python实现简单的服务器
- AngularJS实现长按事件监听(ng-onhold)
- 结构体与类(静态类、抽象类)学习
- Java反射机制
- Android.mk添加本地程序和库的经常使用模版
- Recurrent neural network based language model翻译(部分)
- 邮件营销中如何引导用户注册才能有效预防退订?
- IsIconic()和OnPaint()函数
- 【English】Learning English
- Android零基础入门第45节:GridView简单使用
- mysql中You can't specify target table for update in FROM clause错误