c#关于成员,属性和方法

字段、属性、方法

字段和属性都可以叫做成员变量。但通俗易懂得来说:字段一般只供类内部使用;属性带有getset方法,并且可以按照需求将getset设置为private,决定其是否能被外部访问。

1.字段(field 

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

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

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

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

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

2.属性(property 

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

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

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

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

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

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

 1 // 字段
 2 
 3 private string name;
 4 
 5 private int age;
 6 
 7 private string sex;
 8 
 9 // 属性
10 
11 public string Name
12 
13 {
14 
15 get { return name; }
16 
17 private set { sex = value; }//对外部只读
18 
19 }
20 
21 //内部赋值方法
22 
23 public void setName(string name)
24 
25 {
26     this.name= "lzx";
27 }

属性还有两种写法:

public string Name { get; set; } = "a";//初始值为"a"

public string numbername => "b";//只读,调用时会提示其中只包含get;没有set;

3.方法 Method  

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

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

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

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

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

其他好理解,重点讲下方法参数:

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

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

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

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

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

此外常用的方法有:Virtual方法(虚方法)static静态方法,Abstract方法(抽象方法) 

(关于这些,在后面会详细说明)

参考自大佬博客:https://www.cnblogs.com/qinyi173/p/4635911.html

https://blog.csdn.net/zsk1196468672/article/details/52074373

posted @ 2020-06-09 20:10  穷在闹市  阅读(615)  评论(0)    收藏  举报