C# :类和对象
类和对象的具体定义可以参考 微软官方文档:
类是最基本的 C# 类型。 类是一种数据结构,可在一个单元中就将状态(字段)和操作(方法和其他函数成员)结合起来。 类为动态创建的类实例(亦称为“对象”)提供了定义。 类支持继承和多形性,即派生类可以扩展和专门针对基类的机制。
新类使用类声明进行创建。 类声明的开头是标头,指定了类的特性和修饰符、类名、基类(若指定)以及类实现的接口。 标头后面是类主体,由在分隔符 { 和 } 内编写的成员声明列表组成。
具体请看C#官方文档关于类和对象的详解
下面讲去了解类型参数:
具体定义:
类定义可能会按如下方式指定一组类型参数:在类名后面用尖括号括住类型参数名称列表。 然后,可以在类声明的主体中使用类型参数来定义类成员。
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Pari<int, string,double> pair = new Pari<int, string,double> {
First = 1, second = "two" };
ReadLine();
}
}
//尖括号中的名称是自定义(包括数量也可以为4个或者更多),泛型类类型。在接口和结构,委托中也可以使用泛型;
public class Pari<TFirst,TSecond,Three>
{
public TFirst First;
public TSecond second;
}
}
自我感觉类型参数在使用泛型后,其功能目前我感觉是赋值和初始化某些变量,其功能可以用·类的构造方法来实现同样的功能。
包含类型自变量的泛型类型(如上面的 Pair<int,string,double>)被称为构造泛型类型。
基类
在C#中所有的数据类型都是继承的基类:Object
但是在写程序的过程中总会出现一些情况,用到一个类的一部分属性,但是有一些属性我们定义的类中,它没有,这个时候就需要用到继承。
在C# 中继承和java中的不同 直接用 “ :” 就可以
在刚学到上面的东西会,作者发现类型参数这种东西有点方便,由于使用了泛型,所有我们的变量的类型可以由我们去改写,这样增加了代码的耦合性,我们的代码的适用范围就更大了一些,如下代码:
将展示的是,类型参数和继承。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace ConsoleApp1
{
class Program
{
public static void Main()
{
//使用了类型参数,所有变量类型可以去改变,防止写死程序
Ponit3D<int, int, int> point = new Ponit3D<int, int, int>(3, 4, 5);
WriteLine(point.z);
ReadLine();
}
}
class Ponit<X, Y>
{
public X x;
public Y y;
public Ponit(X x, Y y)
{
this.x = x;
this.y = y;
}
}
class Ponit3D<X,Y,Z> : Ponit<X,Y>
{
public Z z;
public Ponit3D(X x, Y y, Z z) :
base(x,y)
{
this.z = z;
}
}
}
如上代码,体现了 继承和类型参数的方便之处,如果我们已经写好了一个二维的点的类,需要三维的点,直接继承就可以了,需要注意的是:C#中继承这个选项 构造方法 一定要是 base(类型参数)而java的则是super,而且两者的写完也是不同。base(x,y) 是写在方法体外的需要注意。
ref 引用传递自变量
在用法上感觉 ref 和C语言中的指针类似,都用来传递一个参数到一个方法中。但是在定义中,引用参数必须是一个具体的值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace ConsoleApp1
{
class Program