S1/C#语言和数据库技术基础/03-使用属性升级MyBank

访问修饰符

在应用程序中,访问修饰符可以用来修饰类成员字段和方法,以此限定类成员的可访问级别。如果将类的成员(变量或者方法)声明为public,就表示这些类成员可以被其他类访问。如果使用private限制类成员的访问权限,那么这些类成员就只能在该类里面使用,其他类对他们没有访问权限。

如果将某个字段或者方法声明为public,就表示其他类可以访问这个字段或方法;如果声明为private,那么该字段或方法就只能在本类中使用,其他类不能访问。


访问修饰符


访问权限


访问级别


Public


不受任何限制


最高


Private


只有类的内部可以使用


最低

注意:

如果在成员定义之前没有指定访问修饰符,那么这个类成员的访问权项默认为internal,关于internal的含义会在后面的课程中介绍,目前我们可以理解为只能在本项目内访问。

在面向对象的编程语言中,this关键字是指当前对象本身。通过this可以引用当前类的成员变量和方法。如将上面问题中Student类的SetName()中代码“_name=_name;”改写为“this._name=_name;”。

用属性实现字段封装

1、C#的属性

在C#中,字段通常是私有的。如果要访问类中的字段,需要通过get和set访问其实现,这种结合了字段和方法的实现方式我们称之为属性。

语法:

private string _name;

public string Name

{

get{return  _name;}

set{_name = value;}

}

Get访问器用来返回相应的私有字段的值。Get访问器与方法相似,必须用return语句返回字段的值。执行get访问器相当于读取类中私有字段的值。

Set访问器用来设定相应的私有字段的值。Set访问器类似于返回类型为void的方法。他使用一个隐含的输入参数value。当对属性赋值时,将会调用set访问器,并将新的参数赋予对应的字段。

2、属性的数据类型

定义类中的一个属性时,属性的数据类型必须与他所访问的字段类型一致。例如,年龄字段_age是整型,那么,它的属性Age也必须是整型的。如果姓名字段_name为string类型,那么它对应的属性Name也一定是string类型。

注意:属性的类型可以是一个类或一个数组

3、属性的访问类型

属性除了可以约束数据访问外,还可以设置读、写属性来限定它的访问类型。属性的访问类型分为以下三种。

只读类型,只包含get访问器。

只写属性,只包含set访问器。

读写属性,包含get和set访问器。

4、在编码中如何快速的创建属性,右击→重构→封装字段。

规范:在C#中,一般为类的私有字段和属性命名时会采用不同的命名法。

在为类的私有字段命名时,要以下划线“_”开头,随后出现的英文字母采用Camel命名法,及第一个单词的首字母小写。如果字段由多个单词组成,其后单词的首字母大写,如_cardID、_stuName。

在为类的属性命名时,采用Pascal命名法,即组成属性名称的多个单词的首字母要大写,如CardID、StuName.

技巧:封装字段的快捷键是Ctrl+R,E.

C#中,字段和属性的区别是什么?

通常将字段指定为private,在类内部使用。将属性指定为public,对外部公开,通过get或set访问其对字段提供安全、有效范围的保护。

C#中,属性和方法的区别是什么?

C#中的属性set访问器和get访问器后不适用“()”,因为访问器没有返回值,所以也不需要指定void。

5、对象初始化器

在示例4的Main()方法中,先实例化了一个Student对象,然后给属性赋值,如下面的代码:

Student    student=new    Student();

Student.Age=-20;

在C#中,提供了对象初始化器,可以方便的为对象的属性赋值。如下面的代码:

Student    student=new    Student(){Age=-20};

当类中有多个属性时,使用对象初始化器可以同时为多个属性赋值。多个属性之间用逗号间隔,使用{}封闭。例如,可以对示例4的Student类的_name字段添加属性:

public string Name

{

get   {  return  name;    }

set   {  name  =  value;  }

}

利用对象初始化器就可以这样为Name属性和Age属性赋值:

Student   stu=new   Student(){Name="Mike",Age=20};

封装

在面向对象编程中,封装可以理解为将数据和操作方法保存在一起的技术,或是有选择的隐藏或公开类中的属性和方法的过程。封装的具体实现是将成员变量、方法和属性以类的形式进行封装,在类或对象之间通过消息传递进行相互交流,而传递消息是通过调用类公开的方法完成的。

封装的好处:

1、避免使用非法数据赋值。

2、保证数据的完整性。

3、避免类内部发生修改时,导致整个程序的修改。

技巧:假设编写了一段代码以实现两个数交换之后,我们才发现下面这段代码应该拿出来放在一个单独的方法中,这时候该怎么办?

int temp;

temp=num1;

num1=num2;

num2=temp;

解决方案:

使用Visual Studio可以直接将一段代码变成方法,即Visual Studio的重构功能。那么,怎样利用Visual Studio来生成方法呢?操作很简单:

选中要单独放在方法中的那段代码右击,在弹出的快捷菜单中选择“重构”→“提取方法”选项。

选择后会弹出方法命名对话框,把方法命名为Swap,就会在对话框中预览到方法签名。

单击“确定”按钮后,生成的代码如下所示。

Private static void Swap(ref int num1,ref int num2)

{

int temp;                       //中间变量

temp =num1;

num1=num2;

num2=temp;

}

通过以上操作得到的Swap()方法与我们自己定义的方法比较相似。但有两个不同,分别如下。

1、方法中两个参数的声明部分以ref关键字做修饰。关于ref关键字我们在本章的下一节将学习。

2、在方法Swap()前增加了一个关键字static(静态)。关于static关键字的用法将在后面的学习中详细讲解。

值传递和引用传递

值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数的值,必须使用 ref 或 out 关键字通过引用传递该参数。

注意:按引用传递参数在调用方法时也要使用ref修饰参数。

比较值传递与引用传递

总之,值传递是将变量的值复制一份传递给方法,使得该方法的形参和实参的值相同。在调用的方法中修改形参也只是对实参复制品的数据做更新,并没有真正改变实参的值。

引用传递是将要传递的对象的引用复制给方法的形参,使得被调用的方法直接对引用对象进行更改,会影响实参原来的值。

时间: 2024-12-29 11:25:03

S1/C#语言和数据库技术基础/03-使用属性升级MyBank的相关文章

S1/C#语言和数据库技术基础/08-用SQL语句操作数据

SQL语言主要由以下几部分组成: DML(Data Manipulation Language,数据操作语言,也称为数据操纵语言):用来插入.修改和删除数据库中的数据,如INSERT.UPDATE及DELETE等. DDL(Data Definition Language,数据定义语言):用来建立数据库.数据库对象和定义其列,大部分是以CREATE开头的命令,如CREATE TABLE,CREATE VIEW及DROP TABLE等. DQL(Data Query Language,数据查询语言

S1/C#语言和数据库技术基础/07-用表组织数据

SQL Server提供了以下四种类型的约束 1.实体完整性约束 实体完整性要求表中的每一行数据都反映不同的实体,不能存在相同的数据行. 通过索引.唯一约束.主键约束或标识列属性,可以实现表的实体完整性.这些方法的实现将在后面说明. 2.域完整性约束 域完整性指的是给定列输入的有效性. 通过限制数据类型.检查约束.输入格式.外键约束.默认值.非空约束等多种方法,可以实现表的域完整性. 3.引用完整性约束 在输入或删除数据行时,引用完整性约束用来保持表之间已定义的关系. 例如,在管理学生信息的时候

S1/C#语言和数据库技术基础/09-数据查询基础

查询的机制: 查询是针对表中已经存在的数据行而言的,可以简单地理解为“筛选”,将符合条件的数据抽取出来. 数据表在接受查询请求的时候,可以简单的理解为“他将逐行判断”,判断是否符合查询条件,如果符合查询条件就提取出来,然后把所有选中的行组织在一起,形成另外一个类似于表的结构,构成查询的结果,通常叫做结果集(RecordSet). 由于结果集的结果实际上和表的结构类似,都是由行组成的,因此在记录集上依然可以进行再次查询. 使用SELECT语句进行查询 查询使用SELECT语句,最简单的查询语句的格

S1/C#语言和数据库技术基础/11-连接查询和分组查询

分组查询 采用分组查询的T-SQL语句如下. SELECT   CourseID,AVG(Score)   AS   课程平均成绩 FROM   Score GROUP   BY   CourseID (1)查询男女学生的人数各是多少 SELECT   COUNT(*)    AS   人数,SSex    FROM   Students GROUP   BY   SSex (2)查询每个年级的总人数 SELECT   COUNT(*)   AS   年级人数,SGrade   FROM   S

S1/C#语言和数据库技术基础/01-第一个C#程序

执行C#应用程序时,可以使用.NET Framework提供的以下快捷键. F5:启动. Ctrl+F5:开始执行不调试. Ctrl+Atl+L:显示解决方案资源管理器,或者点开菜单栏选择“工具”→“选项”选项对话框,在左边选择“项目和解决方案”选项,在右边勾选“总是显示解决方案”复选框即可. 认识C#程序 namespace关键字,namespace(命名空间)是C#中组织代码的方式,它的作用类似java中的package(包),这样我们就可以把紧密相关的一些代码放在同一个命名空间中,大大提高

S1/C#语言和数据库技术基础/06-程序数据集散地:数据库

实体和记录 实体,所有客观存在的.可以被描述的事务. 记录,数据库中存储的数据表格,每一“行”(Row)实际上对应一个实体,在数据库中通常叫作一条“记录”(Record). 表格中的每一个“列”,如编号.姓名.年龄.民族等,在数据库中,通常称之为“字段”. 数据库管理系统(DataBase Management System,DBMS)是一种系统软件,由一个互相关联的数据集合和一组访问数据的程序构成.这个数据集合通常称为数据库,其中包含了有用的数据信息.数据库管理系统的基本目标是要提供一个可以方

S1/C#语言和数据库技术基础/14-使用ADO.NET访问数据库

ADO.NET提供了两个组件,用来访问和处理数据:.NET Framework数据提供程序和DataSet(数据集) .NET Framework数据提供程序是专门为数据处理及快速地只进.只读访问数据而设计的组件.使用它可以连接数据源.执行命令和检索结果,直接对数据源进行操作. DataSet是专门为独立于任何数据源的数据访问而设计的.使用它,可以不必直接和数据源打交道,大批量的操作数据,也可以将数据绑定在控件上. .NET Framework数据提供程序 .NET Framework数据提供程

S1/C#语言和数据库技术基础/15-使用ADO.NET查询和操作数据

String和StringBuilder 在使用String类时常常存在这样一个问题:当每次为同一个字符串重新赋值时,都会在内存中创建一个新的字符串对象,需要为该新对象分配新的空间,这样会加大系统的开销.因为system.String类是一个不可变的数据类型,一旦对一个字符串对象进行初始化后,该字符串对象的值就不能改变了.当对该字符串的值做修改时,实际上是又创建了一个新的字符串对象.现在我们来分析由以下三个语句组成的这段代码的输出结果是什么. String   strText   =   "He

S1/C#语言和数据库技术基础/04-深入C#的String类

常用字符串处理方法 方法 说明 Bool Equals(string value) 比较一个字符串与另一个字符串value的值是否相等.若二者相等,则返回true:若不相等,则返回false Int Compare(string strA,string strB) 比较两个字符串的大小关系,返回一个整数.若strA小于strB,则返回值小于0:若strA等于strB,则返回值为0:若strA大于strB,则返回值大于0 Int IndexOf(char ,string value) 获取指定的v