1、定义结构体
定义了结构体,必须使用了stuct语句,struct定义了一个带有多个成员的的新数据类型。C# 的结构不同于C的。具有一下等特点:
结构可以有方法。字段、索引、属性、运算方法和事件。结构可以定义构造函数,但是不能定义析构函数,也不能定义默认的构造函数。与类不同得失结构不能继承其他结构。或者类、结构不能作为其他结构的基础捉着类。结构可以实现一个或者对个接口。
结构成员不能是abstract 、vritual 、protected 。当我们使用new 操作符创建一个结构对象的时候。会调用适当的构造函数创建结构。与类不同,结构可以不适用new 关键字既可以被实例化。 如果不适用new 操作符。只有在所用的字段都内初始化之后,字段才会被赋值。对象才会被使用,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
struct book {
public String book_title;
public String book_name;
public String book_subject;
public int book_id;
public void getValue(String t, String a, String b, String d, int n) {
book_title = a;
book_name = b;
book_subject=t;
book_id=n;
}
public void display() {
Console.WriteLine("Title {0}", book_name);
Console.WriteLine("book_title {0}", book_title);
Console.WriteLine("book_subject {0}", book_subject);
Console.WriteLine("book_id {0}", book_id);
Console.WriteLine("book_name {0}", book_name);
}
}
namespace ConsoleApplication12
{
class Program
{
static void Main(string[] args)
{
book book1 = new book();
book book2 = new book();
book1.getValue("c programer", "C #", "java", "编程语言", 12412312);
book2.getValue("python programer", "c++ ", "java", "编程语言", 124123412);
book1.display();
book2.display();
Console.ReadLine();
Console.ReadKey();
}
}
}
2、C#枚举类型: 枚举类型是一组命名整数常量,枚举类型使用enum关键字声明。 C#枚举是值类型,枚举包含自己的值,且不能继承传递。
enum <enum_name> {enumeration list } ;
3、当你定义一个类的时候,你定义了一个数据类型的蓝图,这实际上没哟与定义任何的数据,但是他定义了类的名称,意味着类的对象有什么组成以及这个对象上可执行是么样的操作,对象是实例额的,构成类的方法和变量成为类的成员。
类的默认访问标志符是internal ,成员的默认访问标志符是 private
类的成员函数是一个类定义中有他定义或者原型函数,就像其他变量一样作为一个类的成员,他能在类的任何对象上操作。且能访问该对象的类的所有成员。
C#中的构造函数是一个特殊的函数成员,当创建类的新对象时候执行。 构造函数的名称和类的名称相同,他没有任何的返回类型。下面说明构造函数返回类型。
默认构造函数没有任何的参数。但是如果需要一个带有参数的构造函数,这种构造函数的参数叫做参数化的构造函数,这种技术可以使得创建函数的时候对给的对象赋值初始化。具体的实例如下:
C#中的析构函数 是一个特殊的成员函数,当类的对象超出范围时执行。析构函数的名称是再去爱类的名称之前加上一个~线,他不返回值,也不带任何参数。
析构函数用于在结束程序之前石峰资源,西沟函数不能继承和重载。
C#类的静态成员
我们可以使用static 关键字吧雷闯元定义我建泰的,当我们声明静态的时候,意味无论多少个里类的对象来创建,只会有一个静态成员的副本。声明为静态的变量可以直接通过类来调用。静态冰凉可以在成员函数或者类的定义外部进行初始化,也可以在类的定义内部初始化静态变量。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication17
{
class Static {
public static int num;
public void count()
{
num++;
}
public int getNum()
{
return num;
}
}
class Program
{
static void Main(string[] args)
{
Static s1 = new Static();
s1.count();
s1.count();
s1.count();
Console.WriteLine("s1的变量num {0}", s1.getNum());
Console.ReadLine();
Console.ReadLine();
}
}
}
4、C#继承
继承是面向对象小衡虚设计中的重要概念,继承允许我们根据一个类定义类定义另一个类,这使得创建和维护应用程序变得简单,同时节约了开发的时间。当创建一个类的时候,程序员不需要重新编写新的数据成员函数,只需要设计一个新的类,继承了集资的类的成员即可已有的类被称为基类,这个新的类叫做派生类。
集成的思想实现了 (is_A)的关系。一个类可以派生多个类或者接口。 这就意味着从这个基类或者接口继承数据和函数。C#继承不同于Java的继承 Java继承使用的是 extends关键字。
派生类继承了街垒的成员和方法,因此父类对象在子类对象创建之前被创建,
多重继承,是指一个类可以同时从多余一个父类继承行为与特征的功能,与单一继承相对,单一继承指一个类只可以继承一个父类,C#不支持多重继承,但是课可以使用接口类实现多重继承的效果。
下面就单纯的接口做一个简单的列子:
using System
namespace inheritanceApplication
{
class shap{
public void setWidth(int w){
width=w;
}
public void setHeight(int h){
height=h;}
}
protected int height;
protected int width;
}
public interface Paintcost{
int getCost(int area);
}
public Rectangle:shape,Paintcost{
public int getArea(){
return width*height;
}
public int getcost(int area){
return area=23;
}
}
6、C#多态性
多态性意味着多重形式,在面向对象编程的范畴中,多态性往往表现为一个接口多个功能。多态性可以使静态的多态也可以是动态的多态。静态多态中,函数的响应式在编译时发生,动态的的多态函数的响应是运行时发生。
静态多态性: 在编译的时候,函数和对象的链接机制被称为早期的绑定,也称为静态绑定,C#提供两种技术来事项静态的多态性。分别为函数的重载,和云算符的重载。
函数重载:可以在同一个范围内对相同的函数名有多个定义,函数定义必须彼此不同,可以是参数列表中的参数不同,也可以是参数的个数不同。不能重载只有返回类型不同的函数声明。
动态多态性:C#允许使用关键字abstract创建抽象类,用于提供接口的部分类的试下,当一个派生类继承自该抽象类时,实现即完成,抽象类包含抽象方法,抽象方法可以被派生实现,派生具有更加专业的功能。通过类定义前面放置关键字sealed,可以将类声明成密封类,当一个类被声明成密封类的时候,他不能被继承,抽象类不能被声明为sealed。
using System;
namespace PolymorphismApplication
{
abstract class Shape
{
public abstract int area();
}
class Rectangle: Shape
{
private int length;
private int width;
public Rectangle( int a=0, int b=0)
{
length = a;
width = b;
}
public override int area ()
{
Console.WriteLine("Rectangle 类的面积:");
return (width * length);
}
} class RectangleTester
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(10, 7);
double a = r.area();
Console.WriteLine("面积: {0}",a);
Console.ReadKey();
} }