C# 中的 OOPS 概念

面向对象编程,或 C# 中的 OOPS 概念,是一种包含对象集合的编程类型。每个对象都包含数据字段和数据成员。与 C、FORTRAN、BASIC 等过程式编程语言不同,C# 面向对象编程语言(OOPS 概念)可以轻松升级。

在这里,我们将学习 C# OOPS(面向对象编程)的概念,如类、对象、封装、继承、多态等。其中,封装、继承和多态是实现面向对象编程模型的有用机制。

C# 类

类是用户定义类型,它是 C# OOPS 或面向对象编程的主要概念。

类就像创建对象的蓝图或模板。C# 类不分配任何内存。但内存只分配给创建的类实例。C# 类的语法是

class <classname>
{

}

C# 对象

OOPS 概念中的 C# 对象被称为类的实例,对象包含数据字段和成员函数(数据成员)。实际上,在实时环境中,一切都被认为是对象。这同样适用于面向对象编程。

  • 对象是可以被看到或想象的实体。
  • 对象具有一些属性,用于识别其当前状态并进行验证。
  • 数据成员或成员函数用于说明其功能或行为。
  • 事件用于表示其状态的变化。

因此,我们可以说对象可以根据其状态、功能和事件相互区分。例如,如果我们把一个旋转的风扇看作一个对象,

  • 一个被叶片包围的旋钮,它的品牌和颜色描绘了旋转风扇的状态。
  • 风扇产生的气流被称为它的功能。
  • 而旋转时叶片位置的变化则表示其状态的变化。

在 C# 面向对象术语中,我们说要访问类中的数据字段和成员函数,需要为该类创建一个对象。

OOPS 概念中的 C# 类实例语法

<ClassName> <ObjectName> = new <ConstructorName(<parameter list>)

在为 C# 类创建对象时,这里使用 new 关键字。

C# 变量、实例(对象)和引用之间的区别

本节涵盖 C# 变量、实例(对象)和引用。通过每个示例,您将了解它们之间的区别。

C# 变量

OOPS 概念中的 C# 变量只不过是一个未初始化的类的副本,例如。

int x; x 是 int 类型的一个副本。

string s; String 是一个类,s 是类 string 的副本。

这里,数据类型 int 和类 string 是一个没有分配内存的蓝图。但对于变量 x 和 s,内存是分配的。

因此,变量是特定数据类型的副本,它占用一些内存。相反,C# 数据类型是一个逻辑上的或一个没有分配内存的蓝图。

例如,房屋平面图就像数据类型,根据该平面图建造的实体房屋就是变量。即,上述上下文中的 int 或 string 没有任何内存,而变量具有物理内存。

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

namespace CSharp_Tutorial
{
    class Class1
    {
        int x = 100;
        static void Main(string[] args)
        {
            Console.WriteLine(x);
        }
    }
}
object oriented Programming or OOPS Concept in C# 1

在上述 C# OOPS 程序中,当我们尝试在 main 方法中打印变量 x 时,它会显示一个错误。错误提示您正在尝试在静态 main 方法中打印非静态类变量。

在 C# 中,我们必须为该类创建一个实例才能初始化变量或在 main 方法中打印任何值。并使用该实例打印值,否则它会抛出错误,如下面的代码所示。

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

namespace CSharp_Tutorial
{
    class Class1
    {
        int x = 100;
        static void Main(string[] args)
        {
            Class1 c = new Class1();
            Console.WriteLine(c.x);
        }
    }
}

输出

object oriented Programming OOPS Concept 2

这是因为 C# 变量是未初始化的类的副本。

C# 实例

OOPS 概念中的 C# 实例只不过是类的副本,它有助于使用关键字 new 初始化变量。每个实例都有自己的内存。

为一个 C# 实例分配的内存永远不会与另一个实例共享。这意味着创建了多少个实例,就会为多少个实例分配内存,而无需内存共享。

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

namespace CSharp_Tutorial
{
    class Class1
    {
        int x = 50;
        public Class1()
        {
            Console.WriteLine("value of x is " + x);
        }
        public Class1(int i)
        {
            Console.WriteLine("value of i is " + i);
        }


        static void Main(string[] args)
        {
            Console.WriteLine("Default Constructor is invoked");
            Class1 c = new Class1();
            Class1 c1 = new Class1();
            Console.WriteLine("Parameterized Constructor is invoked");
            Class1 c2 = new Class1(100);
            Class1 c3 = new Class1(200);


        }
    }
}

输出

在上面的程序中,为 Class1 创建了四个实例,

实例 c、c1 使用默认或无参数构造函数 Class1() 创建。而实例 c2、c3 使用参数化构造函数 Class1(int i) 创建。

无论使用哪个构造函数创建的所有实例都将分配独立的内存位置。

C# 引用

C# OOPS 概念中的引用也是类的副本,它与现有实例一起初始化。但是,引用没有分配任何内存。相反,它是为了共享实例的内存而创建的。

C# 类的引用也可以说是实例的指针。通过实例引用的字段和成员函数执行的每个操作都会反映该引用。反之亦然(使用引用进行的更改会反映到创建它的实例)。

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

namespace CSharp_Tutorial
{
    class Class1
    {
        int x;
        public Class1(int i)
        {
            x = i;
        }


        static void Main(string[] args)
        {
            Class1 c = new Class1(100);
            Class1 c2 = c;
            Console.WriteLine("x value using instance c");
            Console.WriteLine(c.x);
            Console.WriteLine("x value using reference c2");
            Console.WriteLine(c2.x);
        }
    }
}

输出

Create an object or instance

在上面编写的 OOPS 概念代码中,c 是 Class1 的实例,而 c2 是为 c 创建的引用。

当我们尝试打印时,使用实例 c 和引用 c2 的 x 值是相同的。输出,即使用引用 c2 打印的 100,是因为它指向实例 c。

分类 C#