C#封装、多态、抽象、接口、匿名方法等学习

本文深入探讨C#中的封装、继承、多态、接口、域与属性等面向对象编程的基本概念,通过实例代码帮助理解。

1:封装

   将对象进行封装,并不等于将整个对象完全包裹起来,而是根据实际需要,设置一定的访问权限,用户根据不同的权限调用对象提供的功能,在C#语言中,可以使用修饰符public、internal、protected、private分别修饰类的字段、属性和方法。


2:继承,主要是注意继承的格式

public class ParentClass  //父类
{
   public ParentClass();
}

public class ChildClass : ParentClass  :子类
{
   public ChildClass();
}


3:多态

    多态是面向对象编程思想的核心之一,多态的意思是:当从父类派生出了一些子类后,每个子类都由不同的代码实现,因此,同样的调用可以产生不同的效果,主要由子类来决定,在程序运行时,面向对象的语言会自动判断对象的派生类型,并调用相应的方法。

   在C#中多态分为两种类型,即编译时多态和运行时多态,编译时多态是通过重载来实现的,运行时多态是系统运行时根据实际情况来决定何种操作。

实例代码:

public class MyIntertest 
{
   public virtual void interest() 
   {
      Console.WriteLine("我的爱好");
      Console.ReadLine();
   }
}

public class Writer : MyIntertest
{
    public override void Interest() 
    {
       Console.WriterLine("写作");
    }
}

public class Program : MyInterest
{
    public override void interest() 
    {
        Console.WriteLine("编程");
    }
}

public class Sing : MyInterest 
{
    public override void interest() 
    {
        Console.WriteLine("唱歌");
    }
}


public class Test 
{
   public static int main(String[] args) 
   {
       MyInterest[] interests = new MyInterest[4];
       interests[0] = new Write();
       interests[1] = new Program();
       interests[2] = new Sing();
       interests[3] = new MyInterest()
       
       foreach ( MyInterest interest in interests)
       {
           interest.interest();
       }
       
       return 0;
   }
}


4:

接口:
   界面,是两个有界事物的交界处,通过界面可以与对方交互,交互的方式由约定产生,这种约定就是由具体交互动作的规则,只要遵循规则
即可与拥有规则的事物交互。
   在C#中,接口是声明类具有的方法和成员的、自身不能被实例化的、只能被继承的特殊的类,其只管描述事物的特性而实现特性的任务却由其他类负责。
   接口中不能包含字段
   接口定义了类要实现的一系列方法,但是它本身不能实现这些方法,只是用逻辑结构方式来描述。
   
   在接口的成员中,只能是方法、属性、事件或者索引器,它的成员不能包含常数、字段、运算符、实例构造函数、析构构造函数或类型,也不能包含任意种类的
   静态成员。
   

 interface MyInterface
   {
      string STR    //属性STR
      {
        get;       //属性可读
        set;       //属性可写
      }    
      void outMethod();   //成员方法outMethod
   }
   
   class InheritInterface : MyInterface
   {
      string str = "21天学习C#";    //定义并初始化字符串
      public string STR
      {
         get
         {
            return str;
         }
         set
         {
            str = value;
         }
      }  
      public void outMethod()
      {
         Console.WriteLine(this.STR);
      } 
   }


5: 域和属性
    域也叫成员变量,它可以用来保存类的各种信息,域可以分为静态域和实例域两种,其中,静态域属于类,实例域属于对象。
    属性是一种用来访问对象的特殊成员。
    
    域的声明:和普通变量相同,可以用new, public, protected, static和readonly等
    
   

 public class Date
    {
       private string name = "hoan";
       public string nameAttr 
       {
         get  //使用get访问器读值
         {
            return name;
         }
         set  //使用set访问器写值
         {
            
         }
       }
    }

6:匿名方法:
   匿名方法的作用是将代码块当作参数来使用,使代码对于委托的实例很直接,很便利,可以减少实例化委托对系统资源的开销。匿名方法还共享了
   本地语句包含的函数成员访问权限。
   
   匿名方法的使用:
    
 namespace codemo
     {
        delegate void Writer(string s);  //委托所调用的命名方法
        class Program 
        {
            static void NamedMethod(string k)   //委托所调用的命名方法
            {
               System.Console.WriteLine(k); 
            }
            static void Main(string[] args) 
            {
               Writer w = delegate(string j)  //委托类调用匿名方法
               {
                  System.Console.WriteLine(j);
               }
               w("调用了匿名方法");
               Console.WriteLine();
               w = new Writer(NamedMethod);  //创建对象
               w("调用了命名方法");          //调用命名方法
               Console.ReadLine();     
            } 
        } 
     }

### C# 面向对象编程核心概念 #### 继承 继承是面向对象编程的一个重要特性,允许一个类从另一个类获取属性和行为。在C#中,通过`:`关键字指定基类来实现单继承。 ```csharp public class Animal { public virtual void MakeSound() { Console.WriteLine("Some generic animal sound"); } } public class Dog : Animal { public override void MakeSound() // 覆盖父类方法 { Console.WriteLine("Bark!"); } } ``` 上述代码展示了如何定义一个名为 `Animal` 的基类以及它的派生类 `Dog`[^1]。 #### 封装 封装指的是将数据成员(字段)及其操作(方法)组合成单一单元——即类,并对外部世界隐藏内部细节的过程。访问修饰符用于控制对这些组件的访问权限。 ```csharp public class Person { private string name; public string Name { get { return name; } set { name = value; } } public void IntroduceYourself() { Console.WriteLine($"Hi, my name is {name}"); } } ``` 这里展示了一个简单的例子,在其中实现了私有字段 `name` 和相应的公共属性 `Name` 来保护其值不被外部直接修改[^3]。 #### 多态 多态性是指同一实体能够表现出多种形态的能力;具体到程序设计领域,则意味着相同的接口可以有不同的实现形式。C# 支持两种类型的多态: - **运行时/动态多态**:主要依赖于虚方法(`virtual`)、抽象方法(`abstract`) 或者覆写 (`override`) 关键字完成。 ```csharp var animals = new List<Animal> {new Cat(), new Dog()}; foreach (var animal in animals) animal.MakeSound(); ``` - **编译时/静态多态**:涉及方法重载(Method Overloading),它发生在同一个作用域内存在同名但签名不同的多个函数的情况下。 ```csharp public class Calculator { public int Add(int a, int b) => a + b; public double Add(double a, double b) => a + b; } ``` 以上片段说明了如何利用多态性的两个方面来编写灵活而可扩展的应用逻辑[^4]。 #### 抽象 抽象化帮助我们关注事物的本质特征而不是具体的实例。在C#里,可以通过声明抽象类或接口达到此目的。它们都不能被实例化,只作为其他类的基础模板使用。 ```csharp public abstract class Shape { protected Color color; public abstract float Area(); public void PrintColorInfo() { Console.WriteLine($"This shape's color is {color}."); } } // 定义圆形类并实现面积计算功能 public class Circle : Shape { private readonly float radius; public Circle(float r, Color c) { this.radius = r; this.color = c; } public override float Area() { return Math.PI * radius * radius; } } ``` 这段代码描述了一种基于形状的概念模型,其中包含了通用的行为模式(比如打印颜色信息),同时也强制任何实际的对象都必须提供特定的功能实现(如求解面积)。这种方式有助于构建更加模块化的应用程序结构[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波哥的技术积累

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值