C#面向对象基础 —— 类与对象

文章来源: https://www.cnblogs.com/huluobozu/p/5070500.html

一、类与对象

类是面向对象编程的基本单元;类造出来的变量叫对象。

一个类包含俩种成员:字段与方法。

字段即变量,方法即函数。

面向对象思想:教给我们如何合理的运用类的规则去编写代码。

 

二、类的字段

字段代表了类中的数据。在变量之前可以加上public、private和protected表示字段的访问权限。

 

三、类的方法

 

1,函数的概念

表达式:
返回值类型 方法名(参数列表)
{
  语句1;
  语句2;
  ...
  return 表达式;        
}

函数需要向外界返回一个值,由 return 语句实现。

如果一个函数没有返回值或者不关心其返回值,则将其返回值类型定义为 void;

 

2,函数的定义和使用

放在一个类中的函数(通常附加一个存取权限修饰符入 public 和 private),称为方法。

访问一个方法的最基本方式是通过类创建的对象,即可以通过使用 new 关键字创建类的对象来访问此方法。

 

3,方法的重载

两个同范围(同一个类,或者父子类中)两个同名但参数类型不同或者参数个数不同的方法互相间构成重载关系。

两个构成重载关系的函数必须满足:

(1)函数名相同。

(2)参数类型不同,或参数个数不同(函数返回值类型的不同不是函数重载的判断条件)。

 

这两个同名的函数彼此构成了“重载关系”。

class Class1
{
    /// 
    /// 函数,方法
    /// 
    public void print()
    {
        Console.WriteLine("hello~");
    }

    /// 
    /// 带参数的方法
    /// 
    /// 
    public void print(string val)
    {
        Console.WriteLine(val);
    }
}

 

 调用:

class Program
{
    static void Main(string[] args)
    {
        Class1 class1 = new Class1();
        //class1.print();   // hello~
        class1.print("hi~");   // hi~
    }
}

 

4,类的静态成员

类中的函数,如果在声明时没有加“static”关键字,则称之为类的“实例方法”。

加了“static”关键字的方法,则称之为类的“静态方法”。

加了“static”关键字的字段,则称之为字段的“静态字段”。

 静态成员是不随着new的对象初始化,直接跟着类名走。

 

静态成员:不随着造对象初始化,所有对象共享直接通过类名调用

(1)访问类的静态成员的基本方法

类名.静态方法名(参数列表)

(2)类静态成员的特性

类的静态成员是供类的所有对象所共享的。

class Class1
{
    public int a;   // 普通成员
    public static int b;   // 静态成员 static;在静态成员中一般不引用普通成员
}

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 5; i++)
        {
            Class1.b++;   // 静态++
            new Class1().a++;   // 实体化一个新的对象
            Console.WriteLine(Class1.b + " " + new Class1().a + "\n");
        }
        Console.WriteLine(new Class1().a);
        Console.WriteLine(Class1.b);

    }
}

 

输出结果:

C#面向对象基础 —— 类与对象_第1张图片

 

class Class1
{
    public int a;   // 普通成员
    public static int b;   // 静态成员 static;在静态成员中一般不引用普通成员
}

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 5; i++)
        {
            Class1.b++;
            Class1 c = new Class1();
            c.a++;   // 新的对象 +1
            Console.WriteLine(Class1.b + " " + new Class1().a + "\n");
        }
        Console.WriteLine(new Class1().a);
        Console.WriteLine(Class1.b);

    }
}

 

输出结果:

C#面向对象基础 —— 类与对象_第2张图片

函数也可以用静态成员。

 

3,类实例成员与静态成员的访问规则

位于同一类的实例方法可以直接互相调用。

类的字段(包括实例字段和静态字段)可以被同一类中的所有实例方法直接访问。

类中的静态方法只能直接访问类静态字段;要访问实例方法,要在静态方法中创建对象。

class Class1
{
    public int a;   // 普通成员
    public static int b;   // 静态成员 static;在静态成员中一般不引用普通成员

    public int sum() {
        return a + b;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Class1.b = 3;   // 赋予新的值
        Class1 c = new Class1();
        c.a = 5;
        Console.WriteLine(c.sum());   // 8

        int d = new Class1().sum();
        Console.WriteLine(d);   // 3

    }
}

 

5,类的属性

属性是一种特殊的“字段”。

属性由两个特殊的读访问器和写访问器组成。

当读取属性时,读访问器被调用,仅简单地向外界返回私有字段的值。
当设置属性时,写访问器别调用,先检查外界传入的值是不是空串,再将传入的值保存于私有字段中。

在读访问器中有一个特殊的变量value必须特别注意,代表了外界传入的值。

编写属性的方法:

(1)设计一个私有的字段用于保存属性的数据 。

(2)设计get读访问器和set写访问器存取私有字段数据。

 

6,深入理解类和对象

(1)类和对象的区别

对象是以类模板创建出来的。类与对象之间是一对多的关系。

在C#,使用new关键字创建对象。

在程序中“活跃”的是对象而不是类。

“对象”与“类的实例”这两个概念是等同的。

 

(2)类的构造函数(一般用于初始化类的私有数据字段)

当使用new关键字创建一个对象时,一个特殊的函数自动调用,这就是类的构造函数。

在C#中,类的构造函数与类名相同,没有返回值。

 

带()的都是函数

构造函数每个类至少有一个构造函数,名字与类名同名;都是可以重载的。

凡事构造对象,都是通过先调用构造函数造出来的。

一般用于给成员赋初始值。

用于跨类之间数据传输。

class Class1
{
    public Class1()   // 默认就存在构造函数,与类名相同,没有返回值
    {

    }

    public string Name;   // 成员变量
}

class Program
{
    static void Main(string[] args)
    {
        Class1 d = new Class1();
        d.Name = "tom";
        Console.WriteLine(d.Name);   // tom
    }
}

 

带参数的构造函数:

class Class1
{
    public Class1(string name)   // 默认就存在构造函数,与类名相同,没有返回值
    {
        Name = name;
    }

    public string Name;   // 成员变量
}

class Program
{
    static void Main(string[] args)
    {
        Class1 d = new Class1("jack");
        Console.WriteLine(d.Name);   // jack
    }
}

 

(3)引用类型与值类型

区别:

值类型的变量一定义之后就马上可用。

引用类型的变量定义之后,还必须用new关键字创建对象后才可以使用。

 

C#的所有值类型均隐式派生自System.ValueType:

  • 结构体:struct(直接派生于System.ValueType);
  • 枚举:enum(派生于System.Enum);
  • 可空类型(派生于System.Nullable泛型结构体,T?实际上是System.Nullable的别名)。

值类型(Value Type),值类型实例通常分配在线程的堆栈(stack)上,并且不包含任何指向实例数据的指针,因为变量本身就包含了其实例数据。

 

C#中的引用类型:

  • 数组(派生于System.Array)
  • object(System.Object的别名);
  • 字符串:string(System.String的别名)。

 

你可能感兴趣的:(C#面向对象基础 —— 类与对象)