【c#.Net】类:面向对象

面向对象思想----制作仪表盘

 

 

 

访问修饰符,如果创建的属性字段,类,什么也不加默认为private

private字段只能在类内使用

 

 

 

 

 

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace test6
 8 {
 9     class DashBoard//仪表盘
10     {
11         public string Name;//表盘名称
12         private double Value;//当前表值,外部应该不能设置表盘读数
13         List<零件> 零件s;
14 
15         public void Reset()
16         {
17             Value = 0;
18             Console.WriteLine("表盘复位完成");
19 
20         }
21         public void Rotate(double angle)//指针转动
22         {
23             Value = angle;
24             Console.WriteLine("转动了{0}度", angle);
25         }
26     
27 
28         public void ShowValue()
29         {
30             Console.WriteLine("当前表盘读数{0}度", Value);
31 
32         }
33     }
34     class 零件 { }
35 
36     //值类型,引用类型 int string list
37     class Program{
38         static void Main(string[] args)
39         {
40             DashBoard db = new DashBoard();//仪表盘实例化,开辟一段连续的内存区域,首地址返回给db(一个实例,一个引用类型)这个引用
41             db.Name = "速度表盘";
42             db.Reset();
43             db.Rotate(10.0);
44             db.ShowValue();
45             Console.Read();
46         }
47     }
48 }

 

一般实例化大类时,其中的属性都是private,避免谁都可以修改里面的变量值

其中:java的一种惯用法

先定义私有变量,然后get取值,set赋值

 

 

 

 

 c#的惯用法:

value是上下文关键字(上下文关键字即根据具体语境判断是不是关键字),value只有在set中才有确切的含义,不在set中可以当作一个变量去使用。

private string _Name;//表盘名称
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
--------为了简化get,set写法,c#再次提出了一个叫做自动属性的说法,上方代码可以简写为以下一句话即可:

private string Name{ get; set; }//表盘名称,Name仍为私有变量,但是可以get,set其值

 

 

  private string Name;同private string Name{ get; set; }是由区别的

private string Name{ get; set; }更灵活,其中get,set中是可以写东西的

仪表盘名字为空,抛异常

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace test6
 8 {
 9     class DashBoard//仪表盘
10     {
11         private string _Name;
12         private double Value;//当前表值,外部应该不能设置表盘读数
13         private List<零件> 零件s;
14         public string Name {
15             get { return _Name; }//set打开,get也需要打开;
16             set
17             {if(string.IsNullOrEmpty(value))
18                 {
19                     try
20                     {
21                         throw new ArgumentNullException();
22                     }
23                     catch (Exception ex)
24                     {
25                         Console.WriteLine(ex);
26                         
27                     }
28                         
29                 }
30                 _Name = value;
31             }
32         }//表盘名称
33 
34 
35         public double GetValue()
36         {
37             return this.Value;//这里的this消除歧义,指当前Dashboard的Value
38         }
39 
40         public void Reset()
41         {
42             Value = 0;
43             Console.WriteLine("{0}表盘复位完成",this.Name);
44 
45         }
46         public void Rotate(double angle)//指针转动
47         {
48             Value = angle;
49             Console.WriteLine("转动了{0}度", angle);
50         }
51 
52 
53         public void ShowValue()
54         {
55             Console.WriteLine("当前表盘读数{0}度", Value);
56 
57         }
58 
59         //将表盘读数存储到数据库
60         public bool Save() //将表盘读数存储到数据库
61 
62         {
63             数据库 dataBase = new 数据库();
64             return dataBase.Store(this);//this表示保存当前Dashboard实例化的各个值到数据库
65         }
66   
67     }
68     class 零件 { }
69     class 数据库
70     {
71         public bool Store(DashBoard db)
72         {
73             return true;
74         }
75     }
76     //值类型,引用类型 int string list
77     class Program{
78         static void Main(string[] args)
79         {
80             DashBoard db = new DashBoard();//仪表盘实例化,开辟一段连续的内存区域,首地址返回给db(一个实例,一个引用类型)这个引用
81             db.Name = "";
82             db.Reset();
83             db.Rotate(10.0);
84             db.ShowValue();
85             Console.Read();
86         }
87     }
88 }

定义只读只写属性

 1 //外部访问权限必须比里面的大,get前是private,set前是public,所以这个是一个只读属性
 2  public string Name {
 3             private get { return _Name; }//set打开,get也需要打开;
 4             public set
 5             {if(string.IsNullOrEmpty(value))
 6                    {
 7                         throw new ArgumentNullException();
 8                     }
 9                       
10                 }
11                 _Name = value;
12             }
13         }//表盘名称
14 //外部访问权限必须比里面的大,set前是private,get前是public,所以这个是一个只写属性
15  public string Name {
16             private get { return _Name; }//set打开,get也需要打开;
17             public set
18             {if(string.IsNullOrEmpty(value))
19                    {
20                         throw new ArgumentNullException();
21                     }
22                       
23                 }
24                 _Name = value;
25             }
26         }//表盘名称

 

 

 DashBoard db = new DashBoard();-----

其中DashBoard()就是一个构造器(也可以叫构造方法,构造函数)

构造方法不需要返回值(比较特殊)

在DashBoard类是否有中DashBoard()都不要及,如果没有,c#默认也给添加的。如果有自己在类中定义的构造方法,那么c#默认定义的原有的构造方法就不生效了。

以下例子,自己在类中的定义了自定义构造方法DashBoard(),默认在创建实例的时候就把仪表盘的名字定义好了。

 

 

 重载

 

 

 创建属性的时候可以初始化赋值

 

 

 构造函数可以相互调用(工作中可能会用到)

 

 

 

 

 

 对象初始化器:

  DashBoard db = new DashBoard() {Name="XX" };

 

 

 有很多方法只用一次,就可以定义匿名对象,没有名字。不用额外建自己的类型,直接打印一些东西很方便

 

 

 

  对象初始化同匿名对象很像。上方对象初始化中用var是因为,c#会根据Dashboard判断类型是Dashboard,所以可以不用明确定义类型。

 

 

 class--类型

字段/属性共享

         static public long Sum { get; set; }//总计数,添加static就代表资源共享,实例中调用直接用Dashboard.Sum()即可调用,用实例名字调用会报错

        public static long Sum { get; set; }

意思一致

 

static是指程序加载第一次的时候,类第一次做的事。

static 方法名

----static只能调用static的方法/字段/属性,无法调用动态的方法/字段/属性。

动态可以调用动态和static的方法/字段/属性

 

 

 

 静态构造器

 

可以直接对static成员变量进行赋值

static 类名----无法创造静态类的实例,不够灵活,那么这个类是唯一的不可变的,内容也比较固定

 

 

 

 

 

 

 

 const多用于常量,编译时确定数值必须确定,

readonly是运行时给值,且无法改变

 

 

 分布类--partial class Dashboard----多人一起作业一个类时用到

分布方法必须在分布类中

partial方法必须是void类型

 

 

 

 

 

 

 

 

 

posted @ 2020-03-01 11:32  猪猪宝丫  阅读(376)  评论(0编辑  收藏  举报