visual C#(七) 创建并管理类和对象

参考书:《 visual C# 从入门到精通》
第二部分 理解C#对象模型
第7章 创建并管理类和对象

7.1 理解分类

设计类的过程就是对信息进行分类,将相关信息放到有意义的实体中。

7.2 封装的目的

封装时定义类时的重要原则,中心思想是:使用类的程序不应关心类内部如何工作。封装有时称为信息隐藏,实际有两个目的:

  • 将方法和数据合并到类中
  • 控制对方法和数据的访问

7.3 定义并使用类

如下:

class Circle{
int radius;
double Area(){
    return Math.PI*radius*radius;
}
}

类的主体包含一般的方法和字段(变量)。

创建Circle变量:Circle c;

初始化:c=new Circle();

注意要用关键字newnew将新建类的实例,即对象。

7.4 控制可访问性

  • 只能从类内部访问的方法或字段是私有的,可以通过关键字private来声明,该关键字是默认的。但通常建议不要省略关键字。
  • 既能从内部访问也能从外部访问的方法和字段是公共的,用public来声明。

7.4.1 使用构造器

与C++类似。

class Circle{
    private int radius;
    public Circle(){
        radius=0;
    }
    public double Area(){
        return Math.PI*radius*radius;
    }
}

7.4.2 重载构造器

class Circle{
    private int radius;
    public Circle(){
        radius=0;
    }
    public Circle(int initialRadius){
        radius=initialRadius;
    }
    public double Area(){
        return Math.PI*radius*radius;
    }
}

分部类

C#允许将类的源代码拆分到单独的文件中。这时要在每个文件中使用关键字partial定义类的不同部分。如假定Circle类被拆分到两个文件中:circ1.cscirc2.cs

//circ1.cs
partial class Circle{
    public Circle(){
        this.radius=0;
    }
    public Circle(int initialRadius){
        this.radius=initialRadius;
    }
}
//circ2.cs
partial class Circle{
    private int radius;
    public double Area(){
        return Math.PI*this.radius*this.radius;
    }
}

小知识:TODO注释:常用于标注以后要进行加工的代码,用它指出此处要完成的工作,如TODO:实现dowork方法,在VS中视窗->任务列表中就会出现相关的标注,双击可以快速定位到相关位置。

下面是一个例子,我们新建一个控制台应用。右键项目添加新建项,选择C#类,命名为Point.cs,代码如下

using System;
using System.Collections.Generic;
using System.Text;

namespace c_7_4_2
{
    class Point
    {
        private int x, y;
        public Point()
        {
            this.x = -1;
            this.y = -1;
        }
        public Point(int x,int y)
        {
            this.x = x;
            this.y = y;
        }
        public double DistanceTo(Point other)
        {
            int xDiff = this.x - other.x;
            int yDiff = this.y - other.y;
            double distance = Math.Sqrt((xDiff * xDiff) + (yDiff * yDiff));
            return distance;
        }
    }
}

然后Program.cs中的代码如下:

using System;

namespace c_7_4_2
{
    class Program
    {
        static void dowork()
        {
            //TODO:实现dowork方法
            Point origin = new Point();
            Point bottomRight = new Point(1366, 768);
            double distance = origin.DistanceTo(bottomRight);
            Console.WriteLine($"Distance is :{distance}");
        }
        static void Main(string[] args)
        {
            dowork();
        }
    }
}

7.5 理解静态方法和数据

静态方法不依赖类的实例,不能访问类的任何实例字段或实例方法。只能访问标记为static的其他方法和字段。

7.5.1 创建共享字段

如下面代码:

class Circle{
    private int radius;
    public static int NumCircles=0;
    public Circle{
        radius=0;
        NumCircles++;
    }
    public Circle(int initialRadius){
        radius=initialRadius;
        NumCircles++;
    }
}

NumCircles字段由所有Circle对象共享。从外部访问字段NumCircles要以Circle为前缀,如Console.WriteLine($"Number of Circle object:{Circle.NumCircles}");

7.5.2 使用const 关键字创建静态字段

const声明的字段称为常量字段。

7.5.3 理解静态类

C#允许声明静态类,静态类只能包含静态成员。静态类纯粹作为工具方法和字段的容器使用。静态类不能包含任何实例数据或方法。所以用new创建静态类的对象是没意义的,编译器会报错。为了执行初始化,静态类允许一个默认构造器,该构造器必须声明为静态。

7.5.4 静态using语句

任何时候调用静态方法或引用静态字段都必须指定方法或字段所属的类。静态using语句允许将类引入作用域,这样在访问时可以省略类名。如:

using static System.Math;

using static System.Console;

var root=Sqrt(99.9);

WriteLine($"The squre root of 99.9 is {root}");

由于静态using语句会使代码的可读性降低,所以还是不建议使用。

7.5.5 匿名类

匿名类是没有名字的类。创建匿名类要以new开头,然后花括号。

myAnonymousObject=new{Name="Johb",Age=47};

该类包含两个公共字段,编译器根据初始化字段的数据类型推断字段的类型。

可以用var将变量声明为隐式类型。

var myAnonymousObject=new{Name="Johb",Age=47};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值