具有相同或相似性质的一组对象的抽象就是类,类是对一类事物的描述,是抽象的、概念上的意义; 对象是实际存在的该类事物的每个个体,因此也称为实例;
在现实世界中,每个物体都有一些颜色、形状和功能——例如,豪华车法拉利。 法拉利是豪华车类型的对象。 豪华车是一个类,表示速度、颜色、形状、内饰等一些特征。因此,任何制造满足这些要求的汽车的公司都是豪华车类型的对象。 例如,宝马、兰博基尼、凯迪拉克的每一辆车都是“豪华车”类的对象。 在这里,“豪车”是一个类,每一辆实体车都是豪车类的对象。 同样,在面向对象的编程中,类定义了一些属性、字段、事件、方法等。类定义了数据的种类和它们的对象将具有的功能。该行为也称为封装。 类使您能够通过对其他类型、方法和事件的变量进行分组来创建自定义类型。
在 C# 中,可以使用 class 关键字定义类。
namespace MalemaConsoleApp1
{
public class Student
{
public string myField = string.Empty;
private string name;
public Student()
{
}
public void Tell(string teacherName)
{
Console.WriteLine($"{teacherName} 老师好 我的名字叫{name} 我今年{Age}岁了。");
}
public int Age { get; set; }
public string Name
{
get { return name; }
set { name = value; }
}
}
}
说明
访问修饰符应用于类、方法、属性、字段和其他成员的声明。 它们定义了类及其成员的可访问性。 public、private、protected 和 internal 是 C# 中的访问修饰符。 我们将在关键字部分了解它。
字段是一个保存值的类级变量。 通常,字段成员应具有private访问修饰符并与属性一起使用。
一个类可以有参数化或无参数的构造函数。 创建类的实例时将调用构造函数。 可以使用访问修饰符和类名来定义构造函数 : <access modifiers> <class name>(){ }
通常这个访问修饰符都应该是public的。
public class Student
{
public Student(int id, string name) //构造方法
{
this.Id = id;
this.Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
只要定义了一个构造器,哪默认的无参构造器就会消失了。需要的话要自己再定义一下public Student(){}
使用这个构造器来创建一个实例
static void Main(string[] args)
{
var s1 = new Student(1, "name");
}
也可以用对象初始化语法来创建一个实例
可以使用以下模板定义方法:
{access modifier} {return type} MethodName({parameterType parameterName})
可以使用 getter 和 setter 定义属性,如下所示:
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
属性封装了一个私有字段。 它提供了获取底层字段值的 getter(get) 和设置底层字段值的 setter(set)。 在上面的例子中,name 是一个不能直接访问的私有字段。 它只能通过 Name 访问。 因此,Name 封装了 name。
您还可以在get和set中应用一些其他逻辑,如以下示例所示。
private string name;
public string Name
{
get { return $"我的名字{name}"; }
set
{
if (name.Length > 3)
{
name = value;
}
throw new ArgumentException("名字不能少于三个字");
}
}
从 C# 3.0 开始,如果你不想在 get 或 set 中做一些逻辑处理,声明属性已经变得很容易了。
以下是自动实现的属性的示例:
public int Age { get; set; }
请注意,上面的属性示例中没有私有字段。 私有字段将由编译器自动创建。 您可以像使用类的普通属性一样使用自动化属性。 当属性访问器中不需要额外的逻辑时,自动实现的属性只是为了方便地声明属性。 C# 6.0 后可以直接 对自动属性赋初始值,如下
public int Age { get; set; } = 5;
public string Name { get; set; } = new string("sdf"); //new 也是可以的
命名空间是一组相关类和命名空间的容器。 使用命名空间我们可以为类创建一个全局唯一类型。
在 C# 中,可以使用 namespace 关键字来定义命名空间。
namespace MalemaConsoleApp1
{
public class Student
{
}
}
在上面的示例中,Student 的完全限定类名称是 MalemaConsoleApp1.Student。
一个命名空间可以包含其他命名空间。 内部命名空间可以使用 (.) 分隔。
namespace MalemaConsoleApp1.Models
{
public class Student
{
}
}
在上面的示例中,Student 的完全限定类名称是 MalemaConsoleApp1.Models.Student。 通常命名空间的命名规则得用复数。