>백엔드 개발 >C#.Net 튜토리얼 >C# 학습일지 23---다형성: 연산자 오버로딩, 메서드 오버로딩, 추상 클래스, 가상 메서드

C# 학습일지 23---다형성: 연산자 오버로딩, 메서드 오버로딩, 추상 클래스, 가상 메서드

黄舟
黄舟원래의
2017-01-21 15:26:391718검색

C#에서 다형성의 정의는 다음과 같습니다. 동일한 작업이 서로 다른 클래스의 인스턴스에 적용되고, 서로 다른 클래스가 이를 다르게 해석하여 최종적으로 서로 다른 실행 결과를 생성합니다. 즉, 하나의 인터페이스, 여러 기능입니다.

C#은 두 가지 형태의 다형성을 지원합니다: 컴파일 시간 다형성, 런타임 다형성

컴파일 시간 다형성:

컴파일 시간 다형성은 오버로딩을 통해 달성됩니다

메서드 오버로딩

동일한 범위에서 동일한 함수 이름에 대한 여러 정의를 가질 수 있습니다. 함수 정의는 매개변수 목록의 매개변수 유형이나 매개변수 수에 따라 서로 달라야 합니다. 반환 유형만 다른 ​​함수 선언은 오버로드될 수 없습니다. 예제 작성

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class exchange  //定义一个exchange类  
    {//方法实现交换两参数数据  
        public void swap(int a, int b)  
        {  
            int temp;  
            temp = a;  
            a = b;  
            b = temp;  
            Console.WriteLine("{0},{1}",a,b);  
        }  
        public void swap(string a, string b)  
        {  
            string temp;  
            temp = a;  
            a = b;  
            b = temp;  
            Console.WriteLine("{0},{1}", a, b);  
        }  
  
    }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            exchange exch = new exchange();  
            exch.swap(10, 20);  //调用 swap(int a,int b)方法  
            exch.swap("大", "小");  //调用 swap(string a,string b)方法  
          
        }  
    }  
}

결과:

C# 학습일지 23---다형성: 연산자 오버로딩, 메서드 오버로딩, 추상 클래스, 가상 메서드

연산자 오버로딩

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  //定义student类  
    {  
        private int Chinese;  
        private int Math;  
        public void value(int a, int b)  //定义一个赋值的方法,以后学了构造方法就不这么麻烦了  
        {  
            Chinese = a;  
            Math = b;  
        }  
        public static student operator + (student a, student b) //运算符重载,实现相加功能  
        {  
            student stu = new student();  
            stu.Chinese = a.Chinese + b.Chinese;  
            stu.Math = a.Math + b.Math;  
            return stu;  
        }  
        public int getChinese()  //获取Chinese 的方法  
        {  
            return Chinese;  
        }  
        public int getMath()  //获取Math 的方法  
        {  
            return Math;  
        }  
    }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            student a = new student();  
            student b = new student();  
            a.value(70,80);  
            b.value(40, 50);  
            student stu = a + b;  //70+40, 80+50  
            Console.WriteLine("a+b Chinese = {0}\na+b Math = {1}", stu.getChinese(), stu.getMath());  
              
        }  
    }  
}

결과:

C# 학습일지 23---다형성: 연산자 오버로딩, 메서드 오버로딩, 추상 클래스, 가상 메서드

런타임 다형성:

런타임 다형성은 시스템이 실행될 때까지 실제 상황에 따라 어떤 작업을 구현할지 결정되지 않는다는 의미입니다. C#의 런타임 다형성은 추상 클래스를 통해 구현되거나 다음을 사용하여 구현됩니다. 가상 방법.

추상 클래스 및 추상 메서드

C#에서는 abstract 키워드를 사용하여 추상 클래스 또는 추상 메서드를 생성할 수 있습니다. 파생 클래스가 추상 클래스에서 상속되면 구현이 완료됩니다. 추상 클래스에는 파생 클래스에서 구현할 수 있는 추상 메서드가 포함되어 있습니다. 파생 클래스에는 보다 전문화된 기능이 있습니다. 추상 클래스는 인스턴스화할 수 없습니다.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{//创建抽象类和抽象方法  
   abstract class score  
    {  
       public abstract int Add();  
    }  
    //创建子类  
   class student : score  
   {  
       private int Chinese = 80;  
       private int Math = 90;  
       public override int Add()  //关键字 override 实例方法  
       {  
          int sum=Chinese+Math;  
           return sum;  
       }  
         
   }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  
                
            Console.WriteLine(stu.Add() );  //结果 170  
             
        }  
    }  
}

가상 메서드

가상 메서드는 virtual 키워드를 사용하여 선언됩니다. 가상 메서드는 상속된 클래스마다 다르게 구현될 수 있습니다. 가상 메서드에 대한 호출은 런타임에 발생합니다.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
   class score  
    {  
       protected int Chinese = 80;  
       protected int Math = 90;  
       public virtual int Add()  //定义一个虚方法  
       {  
           int sum = Chinese + Math;  
           return sum;  
       }  
    }  
   //定义子类,实现方法  
   class student : score  
   {  
       public override int Add()  //关键字 override 实例方法,实现相减操作  
       {  
           int sub = Math - Chinese ;  
           return sub;  
       }  
         
   }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  
                
            Console.WriteLine(stu.Add() );  //结果 10  
             
        }  
    }  
}

실제로 런타임에 호출되는 메소드는 가상 메소드가 아니고 재정의 인스턴스 이후의 메소드임을 알 수 있습니다

위는 C# 학습일지 23---다형성 연산자 오버로딩 , 메소드 오버로딩, 추상 클래스, 가상 메소드에 대한 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.