类是模板,对象是类的实例。
类中的成员包含字段、方法和属性。它们都是对象实例所特有的,且有自己的访问级别,下面几个关键字——
前5个是访问修饰符:
- public,成员可以由任何代码访问。
- private,成员只能由类中的代码访问(如果没有用关键字,就默认用这个)。
- internal,成员只能由定义它的程序集(项目)内部的代码访问。
- protected,成员只能由类或派生类中的代码访问。
- protected internal,成员只能由程序集中派生类的代码访问。
另还有一个 static,表示它们是类的静态成员,而不是对象实例的成员。静态成员可以在类的实例之间共享,可以将它们看成类的全局对象。静态属性和字段可以访问独立于任何对象实例的数据,静态方法可以执行与对象类型相关但与对象实例无关的命令,例如Console.WriteLine()就是静态方法。使用静态成员时甚至不需要实例化对象。
字段
定义:
class ExamClass
{
public int IntVar;
//公共字段最好这样命名 每个单词首字母大写(PascalCasing形式)
//而私有字段通常用camelCasing的形式命名
}
字段也可以用readonly,表示这个字段只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值:
class ExamClass
{
public readonly int IntVar = 777;
}
也可以用static将字段声明为静态:
class ExamClass
{
public static int IntVar;
}
静态字段必须通过定义它们的类来访问(这里是ExamClass.IntVar),而不能通过这个类的对象实例访问。
也可以用const创建一个常量值。const成员也是静态的,所以不能再用static修饰符。
方法
方法表示对象中的函数。
定义时有以下关键字:
- virtual,方法可以重写。
- abstract,方法必须在非抽象的派生类中重写(只用于抽象类中)。
- override,方法重写了一个基类方法。若方法被重写,就必须用该关键字。
- extern,方法定义放在其他地方。
- static,若要了用该关键字,这个方法就只能通过定义它们的类来访问,而不能通过这个类的对象实例访问。
公共方法的命名也采用PascalCasing形式。
重写方法例子:
public class BaseClass
{
public virtual void DoSomething()
{
……
}
}
public class DerivedClass : BaseClass
{
public override void DoSomething()
{
……
}
}
如果用了override,那也可以用sealed,指定在派生类中不能对这个方法做进一步修改(这个方法不能被派生类重写)。
public class DerivedClass : BaseClass
{
public override sealed void DoSomething()
{
……
}
属性
属性定义与字段相似,但包含的内容较多。公共属性也用PascalCasing形式命名。
属性在修改状态前还可以执行一些额外操作(也可能不修改状态)。属性有两个类似于函数的块,一个块用于获取属性的值,另一个用于设置属性的值。
这两块也成访问器,分别用get和set关键字定义,可用于控制属性的访问级别。可以忽略其中的一个块来创建只读或只写属性(忽略get创建只写属性,忽略set创建只读属性),访问器上也可以包含可访问修饰符(public,protected…)至少包含其中一个块属性才有效(属性不可能又不能读又不能写)。
属性可以用virtual、override和abstract关键字,但这几个关键字不能用于字段。
——————
属性其实就是用来保护私有字段不被轻易修改的。
class ExamClass
{
//这里IntVar字段是私有的,外部代码不能直接访问该字段
//外部代码通过属性IntProp来访问该字段
private int IntVar;
public int IntProp
//属性定义中第一行和字段定义非常相似,但行末没有分号,而是包含get和set代码块
{
get{ return IntVar; } //返回IntVar的值
set{ IntVar = value; }
//value表示用户提供(输入)的属性值(value等于类型与属性相同的一个值)
//set也可以更复杂一些————
set
{
if(value >= 0 && value <=10) IntVar = value;
else //抛出异常代码
}
}
}
——————————————————————————————————————————————————————————————
外部代码访问该私有字段 要通过属性来访问:
ExamClass a;
a.IntProp=xxx; //set
System.Console.WriteLine("value = {0}", a.IntProp); //get
私有属性对它的访问器不能包含任何可访问修饰符,公共属性可对其访问器使用所有的可访问修饰符。
构造函数
所有类定义都至少包含一个构造函数;这些函数中可能有一个默认构造函数,它没有参数,与类同名。还可能包含带有参数的构造函数,称为费默认构造函数。
C#中,用关键字new调用构造函数。
//通过默认构造函数实例化一个Coffee对象
Coffee blueMountain = new Coffee();
//如果有相应类型的非默认构造函数,也可以这样实例化
Coffee blueMountain = new Coffee(“30”);
构造函数也可以是公共或私有的。类外部的代码不能使用私有构造函数实例化对象,必须用公共构造函数。
所以一些类中没有公共构造函数,外部代码不能实例化它们,这些类叫不可创建的类。例如Console、Convert类。
静态类
只包含静态成员,不能包含实例构造函数,因为它不能实例化,但是静态类可以有一个静态构造函数。
静态类用于创建无需创建类的实例就能访问的数据和函数,静态类只能包含静态成员,不可以包含非静态成员。静态成员用于分离独立任何对象标识的数据和行为: 无论对象发生任何改变,这些数据和函数都不会随之变化。
例如: 简单的数学运算不依赖任何对象,所以我们可以将其定义为静态类。
static class Mathf
{
public static string mainFunc =“简单数学运算”;
//静态类当中还可以定义const修饰的常量
public const int defaultValue = 0;
//求绝对值
public static int Abs(int value)
{
return value > 0 ? value : -value;
}
}
//求两个整数当中的最小值
public static int MinValue(int numA,int numB)
{
return numA > numB ? numB : numA;
}
}
使用静态类Mathf:
int absValue = Mathf.Abs(-10);
int minValue = Mathf.MinValue(20, 30);
---------------------
作者:VRunSoftYanlz
来源:优快云
原文:https://blog.youkuaiyun.com/VRunSoftYanlz/article/details/78630979
版权声明:本文为博主原创文章,转载请附上博文链接!