1.结构 struct 没()
结构是一种值类型,通常用来封装一组相关的变量,结构中可以包括构造函数、常量、字段、方法、属性、运算符、事件和嵌套类型等。如果要同时包括上述集中成员,则应该考虑使用类。
结构修饰符 struct 结构名
{
}
在结构声明中,除非字段被声明为const或static,否则无法初始化。
需要实例化结构,才可以对结构进行使用。
也可以使用构造函数实例化结构。
using System;
namespace _11
{
internal class Program
{
static void Main(string[] args)
{
Rect rect1; //实例化矩形结构
rect1.width = 10; //为矩形的宽和高赋值
rect1.height = 10;
Console.WriteLine(rect1.Area());
//Rect rect2 = new Rect(6,4); //使用构造函数实例化矩形结构
//Console.WriteLine(rect2.Area());
}
public struct Rect //定义一个矩形结构
{
public double width;
public double height;
//public Rect(double x, double y) //构造函数 初始化矩形的宽和高
//{
// width = x;
// height = y;
//}
public double Area() //矩形面积
{
return width * height;
}
}
}
}
2.面向对象概述
①对象
在面向对象中,算法和数据结构被看作一个整体,称为对象。对象=(算法+数据结构)
程序=(对象+对象+……)
通常都会将对象划分成两个部分,即动态部分和静态部分。
静态部分就是不能动的部分,这个部分被称为属性,任何对象都会具备其自身属性。
动态部分为行为。
②类
类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。
③封装
面向对象程序设计具有以下特点:
封装性、继承性、多态性
封装是将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类。
④继承
继承关系可以使用树形关系来表示,父类和子类存在一种层次关系。一个类处于继承体系中,它既可以是其他类的父类,为其他类提供属性和行为,也可以是其他类的子类,继承父类的属性和行为。
⑤多态
将父类对象应用于子类的特征就是多态。
3.类 class 没()
类是对象概念在面向对象编程语言中的反应,是相同对象的集合。
①类的声明
类修饰符 class 类名
{}
②构造函数和析构函数
构造函数和析构函数是类中比较特殊的两种成员函数,主要用来对对象进行初始化和回收对象资源。
对象的生命周期从构造函数开始,以析构函数结束。
③构造函数的概念和使用
构造函数是在创建给定类型的对象时执行的类方法。
构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
例:
using System;
namespace gouzaohanshu
{
class Program
{
public int x = 1; //定义int型变量
public int y = 2;
public int z = 0;
public Program() //在构造函数中为和赋值
{
z = x + y;
}
static void Main(string[] args)
{
Program program = new Program(); //使用构造函数实例化Program对象
Console.WriteLine(program.z); //使用实例化的Program对象输出加法运算的和
}
}
}
④析构函数的概念及使用
析构函数是以类名加“~”来命名的。
4.对象的创建和使用
①对象的创建
在C#语言中通过new操作符来创建对象
Test test = new Test();
Test test = new Test(“a”);
其中 Test为类名;test为创建Test类对象;new为创建对象操作符;”a”为构造函数的参数。
namespace Creatrd
{
public class CreateObjext
{
public CreateObjext() //构造函数
{
Console.WriteLine("创建对象");
}
public static void Main(string[] args) //主方法
{
new CreateObjext(); //创建对象 在创建对象的同时,将自动调用构造函数中的代码
}
}
}
②访问对象的属性和行为
当使用new操作符创建了一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。
注(自己的理解):创建对象时一定要有构造函数,在创建对象的同时,将自动调用构造函数中的代码。若要访问对象的属性和行为,则构造函数内部可以是空,但是一定要有构造函数,构造函数名要与类名相。在创建两个对象,调用同一个成员变量时,两个对象是相互独立的,对其中的一个对象的成员变量进行赋值,不影响另一个对象的成员变量的值。
③对象的引用
类名 对象引用名称
例如:Book book;
Book book = new Book();
其中Book为类名;book为对象;new为创建对象操作符。
④对象的销毁
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被收回。
主要包括以下两种情况:
a.对象引用超过其作用范围,则这个对象将被视为垃圾。
{
Example e = new Example();
}
b.将对象赋值为null
{
Example e = new Example();
e = null;
}
5.this关键字
private void setName(String name)
{
this.name = name;
}
其中,this.name中的name指Book类中的name成员变量;第二个name指形参name。
this还可以作为方法的返回值。
public Book getBook()
{
return this;
}
在getBook()方法中,方法的返回值为Book类,所以方法体中使用return this这种形式将Book类的对象进行返回。
5.类与对象的关系
类是一种抽象的数据类型,但是其抽象的程度可能不同,而对象就是一个类的实例。例如,农民工是一个类,那么张三和李四就可以各为一个对象。
6.类的面向对象特性
①类的封装
namespace leidfz
{
class Myclass //自定义类,封装加数和被加数属性
{
private int x = 0; //定义int型变量,作为加数
private int y = 0; //定义int型变量,作为被加数
public int X //加数
{
get
{
return x;
}
set
{
x = value;
}
}
public int Y //被加数
{
get
{
return y;
}
set
{
y = value;
}
}
public int Add() //求和
{
return X + Y;
}
}
class Program
{
static void Main(string[] args)
{
Myclass myclass = new Myclass(); //实例化Myclass的对象
myclass.X = 1; //为Myclass类中的属性赋值
myclass.Y = 2;
Console.WriteLine(myclass.Add()); //调用Myclass类中的Add()方法求和
Console.ReadLine();
}
}
}
②类的继承
任何类都可以从另外一个类继承。
类继承时,需要使用冒号加类名。当对一个类应用sealed修饰符时,此修饰符会阻止其他类从该类继承。
namespace leijc
{
class Myclass1
{
private int x = 0;
private int y = 0;
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
public int Add1()
{
return X + Y;
}
}
class Myclass2:Myclass1 //自定义类,该类继承Myclass1
{
private int z = 0;
public int Z
{
get { return z; }
set { z = value; }
}
public int Add2()
{
return X+Y+Z;
}
}
class Program
{
static void Main(string[] arg)
{
Myclass1 my1 = new Myclass1();
Myclass2 my2 = new Myclass2();
my1.X = 1;
my1.Y = 2;
my2.X = 3;
my2.Y = 4;
my2.Z = 3;
Console.WriteLine(my1.Add1()); //3
Console.WriteLine(my2.Add1()); //7
Console.WriteLine(my2.Add2()); //10
}
}
}
6.类的多态
多态使子类(派生类)的实例可以直接赋予基类的变量,然后直接就可以通过这个变量调用子诶(派生类)的方法。