[.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

前面定义的Person的类,里面的成员包括:字段、属性、方法、事件等,此外,前面说的嵌套类也是类的成员。

a.类的成员为分:静态成员(static)和非静态成员

b.静态成员用static标识,不标识则默认为非静态成员

c.静态成员属于类所有,动态成员则属于实例所有,即对象

d.静态成员为类所有实例共享,无论类有多少实例或副本,静态成员只占用存中一块区域。非静态成员则在类的每个实例,都创建一个内存域。

下面主要说明一下类的主要成员:字段、属性、方法

1.类的成员——字段(field)

 字段声明:(static/readonly) <Type> <变量名称>   

a.可以理解为类的一个私有变量,通常都是私有的(private)。

b.字段的定义通常以小写字母开头或 “_” 开头。

c.字段声明修饰符有static(静态)和readonly(只读)两种。

d字段通常为私有,因此一般不需要使用访问修饰符.

示例:

    static int eyesCount=;
readonly int earsCount=;

2.类的成员——属性(property)

a.可以理解为类的一个公有变量,通常都是公有的(public)

b.属性有get 和 set 两个方法。

c.get 访问器返回与属性声明类型相同的数据, 表示的意思是调用时可以得到内部的字段的值或引用。

d.set 访问器没有显示设置的参数,它有一个隐式参数value    它的作用是调用时,可以给属性内部字段或引用赋值。

e.由于类的成员默认为私有,因为根据属性为公有的特征,在面向对象开发过程中,要使用修饰符public来声明一个属性为公有。

f.属性可以忽略get或set访问器,但是不能两个都忽略.

示例:

 string _country;
//读写属性
public string Country
{
set { _country = value; }
get { return _country; }
}
//只读属性
public string CountryOnleread
{
get { return _country; }
}
//只写属性
public string Countryonlywrite
{
set { _country = value; }
}

6.类的成员——方法 (Method )

      声明:(访问修饰符) <类型> <方法名>{方法体}

     调用:[<类名.>]|[<实例对象名.>]<方法名>([<实参列表>])

     定义:是类中用于执行计算或其它行为的成员

静态方法:
     方法分为实例方法和静态方法(同前面讲的类的成员)

静态方法中只能调用静态字段,不允许调用非静态字段

方法参数:

值参数:不含任何修饰符。方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的。

引用参数:以ref修饰符声明。

ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
    若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
    传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。
    属性不是变量,因此不能作为 ref 参数传递。
    尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。
    如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。

代码示例:

//调用
double[] numbers = new double[] { , , , 5.5 };
double i = ;
MyAddOperation(numbers, ref i);
Console.WriteLine("计算结果的2倍是:{0}",i*);
Console.ReadLine(); //引用参数方法声明
public static void MyAddOperation(double[] numbers, ref double result)
{
result = ;
foreach (double num in numbers)
result += num;
Console.WriteLine("计算结果是:{0}", result);
}

输出参数:以out修饰符声明。和ref类似,它也是直接对实参进行操作。在方法声明和方法调用时都必须明确地指定out关键字。out参数声明方式不要求变量传递给方法前进行初始化,因为它的含义只是用作输出目的。但是,在方法返回前,必须对out参数进行赋值。 
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似。

与 ref 的不同之处: 
ref 要求变量必须在传递之前进行初始化。 
尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。

示例:

 //调用
double[] numbers = new double[] { , , , 5.5 };
double i = ;
MyAddOperation(numbers, out i);
Console.WriteLine("计算结果的2倍是:{0}",i*);
Console.ReadLine(); //输出参数方法声明
public static void MyAddOperation(double[] numbers, out double result)
{
result = ;
foreach (double num in numbers)
result += num;
Console.WriteLine("计算结果是:{0}", result);
}

 数组型参数:以params修饰符声明。params关键字用来声明可变长度的参数列表。方法声明中只能包含一个params参数。params 参数在参数数目可变的情况下,非常有用,看下面的示例:

 //调用方法
double[] numbers = new double[] { , , , 5.5 };
Console.WriteLine("计算结果是:{0}", MyAddOperation(numbers)); //数组型参数声明
public static double MyAddOperation(params double[] numbers)
{
double result = ;
foreach (double num in numbers)
result += num;
return result;
}

Virtual方法(虚方法)

virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:

情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。

情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。

Abstract方法(抽象方法)

abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。

(关于抽象类,在后面会详细说明)

要点:

1.静态方法中只能调用静态字段,不允许调用非静态字段

2. 无返回值的方法,类型为 void

==============================================================================================

返回目录

==============================================================================================

[.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)的更多相关文章

  1. python基础(26):类的成员(字段、方法、属性)

    1. 字段 字段:包括普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同. 普通字段属于对象 静态字段属于类 字段的定义和使用: class Province: # ...

  2. [.net 面向对象编程基础] (9) 类和类的实例

    [.net 面向对象编程基础] (9) 类和类的实例 类 ,顾名思义就是分类.类别的意思.我们要面向对象编程,就需要对不同的事物进行分类.类可以说是.net面向对象的核心. 类:就是具有相同的属性和功 ...

  3. 廖雪峰Java2面向对象编程-5包和classpath-1静态字段和方法

    1.静态字段 1.1定义:用static修饰的字段称为静态字段 普通字段在每个实例中都有自己的一个独立的空间 静态字段只有1个共享空间,所有实例都共享该字段. public class Person{ ...

  4. [.net 面向对象编程基础] (1) 开篇

    [.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...

  5. [.net 面向对象编程基础] (8) 基础中的基础——修饰符

    [.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...

  6. [.net 面向对象编程基础] (15) 抽象类

    [.net 面向对象编程基础] (15) 抽象类 前面我们已经使用到了虚方法(使用 Virtual修饰符)和抽象类及抽象方法(使用abstract修饰符)我们在多态一节中说到要实现类成员的重写必须定义 ...

  7. C#面向对象编程基础-喜课堂笔记

    **************[5][C#面向对象编程基础]第1讲:类与对象****************                 *************2.1.1_类与对象的概念**** ...

  8. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

  9. 《挑战30天C++入门极限》C++面向对象编程入门:类(class)

        C++面向对象编程入门:类(class) 上两篇内容我们着重说了结构体相关知识的操作. 以后的内容我们将逐步完全以c++作为主体了,这也意味着我们的教程正式进入面向对象的编程了. 前面的教程我 ...

随机推荐

  1. Spring 4 官方文档学习 Spring与Java EE技术的集成

    本部分覆盖了以下内容: Chapter 28, Remoting and web services using Spring -- 使用Spring进行远程和web服务 Chapter 29, Ent ...

  2. A multi-faceted language for the Java platform

    最近在研究关于groovy 相关的技术 希望有研究交到研究这方面的朋友 Groovy 最新的地址 http://www.groovy-lang.org/

  3. nodejs的url参数获取

    express封装了多种http请求方式,我们主要使用get和post两种,即qpp.get和qpp.post.qpp.get和qpp.post的第一个参数都为请求的路径,第二个参数为处理请求的回调函 ...

  4. 倒计时(jQuery)

    倒计时,在网页制作中会经常用到,特别是一些节日活动页面运用更是广泛.今天就和大家分享一下jQuery如何实现倒计时.话不多说,言归正传,倒计时开始: 首先,既然是用jQuery实现,那么前提就是要先引 ...

  5. JAVA获取服务器路径的方法

    1.在JSF环境中获取到ServletContext: 1 2 ServletContext sc = (ServletContext)FacesContext.         getCurrent ...

  6. iOS 状态栏设置

    1. 软件启动瞬间即弹出启动图的时候隐藏状态栏的方法 修改<YOUR_APP>-Info.plist,在Xcode中修改,在根结点Iinfo下面新加一项“Status bar is ini ...

  7. CentOS 7下MySQL安装配置

    安装: #centos 7 yum install -y mariadb mariadb-server mariadb-devel #debian 8 apt-get install nginx ma ...

  8. HTTP版本进化过程

    http版本之间的区别以及变化过程[更新中...]

  9. 时空地图TimeGIS 可编辑ArcGIS的Shape矢量文件的地理信息系统

    时空地图 TimeGIS 6.0 是一个地理信息系统软件,它可以显示网络地图,编辑ArcGIS的SHP矢量文件格式,显示NETCDF等栅格文件,管理图层等. 在它的基础上,可以二次开发各种GIS应用, ...

  10. 1.本周的作业请参照此文:http://www.ruanyifeng.com/blog/2015/12/git-workflow.html 制定本组项目的GitHub版本更新流程---答题者:徐潇瑞

    首先,介绍一下gitflow,它是最早诞生.并得到广泛采用的一种工作流程.如果采用git flow开发流程,那么项目存在两个常设分支,一个叫主分支master,另一个叫开发分支develop.mast ...