C#基础 属性和方法,结构和类(构造函数)

本文介绍了C#中的类、属性、方法、结构和构造函数的基本概念。类是数据类型的蓝图,用于定义对象的组成和可执行的操作。属性是类的命名成员,提供对私有域的读写访问。方法是执行特定任务的语句块,可以通过访问修饰符控制其可见性。构造函数在创建对象时执行,用于初始化对象。结构是值类型,不同于类,不支持继承且不能定义析构函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、类
定义一个类时,等于定义了一个数据类型的蓝图。
这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。
对象是类的实例。构成类的方法和变量成为类的成员。

类的定义:
类的定义是以关键字 class 开始,后跟类的名称。
类的主体,包含在一对花括号内。

类定义的一般形式:
class class_name
{
// member variables
variable1;

variableN;
// member methods
method1(parameter_list)
{
// method body
}
}

访问标识符 指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是 internal,成员的默认访问标识符是 private。
数据类型 指定了变量的类型,返回类型 指定了返回的方法返回的数据类型。

二、属性
属性是类,结构和接口的命名成员。
类或结构中的成员变量或方法称为域。
属性是域的扩展,且可使用相同的语法来访问。
它们使用访问器让私有域的值可被读写或操作。
属性不会确定存储位置。
相反,它们具有可读写或计算它们值的访问器。

访问器
属性的访问器包含有助于读取或计算或设置属性的可执行语句。
访问器声明可包含get访问器,set访问器。

三、方法
方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。

定义方法:
当定义一个方法时,从根本上说是在声明它的结构的元素。
(Parameter List)
{
Method Body
}
Access Specifier:访问修饰符,这个决定了变量或方法对于另一个类的可见性。
Return type:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为 void。
Method name:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。
Parameter list:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。
Method body:方法主体,包含了完成任务所需的指令集。

调用方法:
类内部可以使用方法名调用方法,类外部必须使用类的实例化对象名.方法名进行调用。

四、构造函数
类的构造函数是类的一个特殊的成员函数,当创建类的新对象时执行。
构造函数的名称与类的名称完全相同,它没有任何返回类型。
默认的构造函数没有任何参数。
但是如果你需要一个带有参数的构造函数可以有参数,这种构造函数叫做参数化构造函数。
带有参数的构造函数可以在创建对象的同时给对象赋初始值。

构造函数的定义:
//不带参数的构造方法
public 类名()
{
//执行代码
}
//带参数的构造方法
public 类名(数据类型 参数1,数据类型 参数2,数据类型 参数3,……,数据类型 参数N)
{
//执行代码
}

析构函数:
类的析构函数是类的一个特殊的成员函数,当类的对象超出范围时执行。
析构函数的名称是在类的名称前加上一个波浪形(~)作为前缀,它不返回值,也不带任何参数。
析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源。
析构函数不能继承或重载。

析构函数的定义:
~类名()
{
//执行代码
}

代码示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace base07
{
    public  class Person
    {
        //定义属性 属性之前会有数据类型 由于数据类型 所以每一个属性的会有默认值
        /// <summary>
        /// 年龄
        /// </summary>
        public int age;
        /// <summary>
        /// 姓名
        /// </summary>
        public string name;
        /// <summary>
        /// 地址
        /// </summary>
        public string address;



        //方法
        //方法的重载,同名不同参,与返回值无关
        //无参无返回 无参有返回 有参有返回 有参无返回


        //(1)无参无返回
        public void ShowTime() {
            Console.WriteLine("展现我的时刻、、、");
            Console.ReadLine();
        }
        //(2)无参有返回
        /// <summary>
        /// 输出当前的
        /// </summary>
        /// <param name="p">需要输出信息的对象</param>
        public void ShowTime(Person p)
        {
            Console.WriteLine("名字是:{0},年龄是:{1},地址是:{2}", p.name, p.age, p.address);
            Console.ReadLine();
        }
        //(3)无参有返回
        /// <summary>
        /// 获取年龄的默认值
        /// </summary>
        /// <returns>返回一个默认值是18</returns>
        public int getage() {
            return 18;
        }


        //构造函数 分为两个 无参的构造函数 有参的构造函数
        //如果写了 有参构造函数 而不写无参构造函数 则当前类里面只会有有参构造函数
        //所以我们在写构造函数的时候,有参构造函数无参构造函数都要进行编写
        //构造函数是公共的 构造函数与类名一致的 构造函数没有返回与不返回之说的

        //无参的构造函数
        public Person()
        {
            Console.WriteLine("我是无参的构造方法。。。");
        }
        //有参的构造函数
        public Person(string name,int age,string address) {
            //this指的是当前类
            this.name = name;
            this.age = age;
            this.address = address;
        }

        //析构函数
        ~Person(){
            Console.WriteLine("我是析构函数,等于当前的对象使用完毕,并回收(GC)垃圾回收机制");
        }





    }
}

测试类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace base07
{
    class Program
    {
        static void Main(string[] args)
        {

            //如何使用类
            //1.类实际上就是对象的共同描述体
            //2.对象=万事万物 皆为对象
            //3.对象有一个关键字 new

            //p1是创建出来的一个对象,对象的名称叫p1

            Person p1 = new Person();
            //给当前的p1对象进行赋值
            p1.name = "张三";
            p1.age = 18;
            p1.address = "湖南";
            //p1 实际上是指的 名字是张三,年龄18,地址湖南。
            //输出对象信息
            Console.WriteLine("名字是:{0},年龄是:{1},地址是:{2}",p1.name,p1.age,p1.address);
            Console.ReadLine();

            //调用无参无返回的
            p1.ShowTime();
            //调用无参有返回的
            p1.ShowTime(p1);

            Person p2 = new Person("李四",19,"北京");


            //调用结构
            Student sd;
            sd.sname = "展伞";
            sd.adderss = "南京";
            sd.ShowTime();






        }
    }
}

五、结构
结构体是值类型数据结构。
它使得一个单一变量可以存储各种数据类型的相关数据。
struct 关键字用于创建结构体。

定义结构:
为了定义一个结构,必须使用 struct 语句。
struct 结构名
{
属性;
};

使用结构:
结构名 结构变量名;
结构变量名.属性=属性值;

结构有以下特点:
1.结构可带有方法、字段、索引、属性、运算符方法和事件。
2.结构可定义构造函数,但不能定义析构函数。
但是能为结构定义默认的构造函数。
3.默认的构造函数是自动定义的,且不能被改变。与类不同,结 构不能继承其他的结构或类。
4.结构不能作为其他结构或类的基础结构。
5.结构可实现一个或多个接口。
6.结构成员不能指定为 abstract、virtual 或 protected。
7.使用 New 操作符创建一个结构对象时,会调用适当的构造函 数来创建结构。与类不同,结构可以不使用 New 操作符即 可被实例化。不使用 New 操作符,只有在所有的字段都被 初始化之后,字段才被赋值,对象才被使用。

类和结构有以下几个基本的不同点:
1.类是引用类型,结构是值类型。
2.结构不支持继承。
3.结构不能声明默认的构造函数。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace base07
{
    /// <summary>
    /// 定义一个学生的结构
    /// </summary>
    public struct Student
    {
        public string sname;
        public string adderss;


        public void ShowTime() {
            Console.WriteLine(this.sname+"---"+this.adderss);
            Console.ReadKey();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值