C#学习 5 类成员

本文围绕C#中的类展开,介绍了类成员,包括字段、方法、属性,阐述了它们的定义、访问修饰符及相关关键字的使用。还讲解了构造函数,包括默认和非默认构造函数。此外,对静态类进行了说明,指出其只能包含静态成员,用于分离独立于对象的数据和行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类是模板,对象是类的实例。
类中的成员包含字段、方法和属性。它们都是对象实例所特有的,且有自己的访问级别,下面几个关键字——
前5个是访问修饰符:

  1. public,成员可以由任何代码访问。
  2. private,成员只能由类中的代码访问(如果没有用关键字,就默认用这个)。
  3. internal,成员只能由定义它的程序集(项目)内部的代码访问。
  4. protected,成员只能由类或派生类中的代码访问。
  5. 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修饰符。

方法

方法表示对象中的函数。
定义时有以下关键字:

  1. virtual,方法可以重写。
  2. abstract,方法必须在非抽象的派生类中重写(只用于抽象类中)。
  3. override,方法重写了一个基类方法。若方法被重写,就必须用该关键字。
  4. extern,方法定义放在其他地方。
  5. 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 
版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值