-
C# 오버라이드, 오버로드 (13일차)C# 2020. 6. 3. 17:37
오버라이드
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _20200603_001 { class Mammal { public virtual void Move() { Console.WriteLine("이동한다"); } } class Lion : Mammal { public override void Move() //override 자리에 아무것도 안적으면 new로 번역한다. { Console.WriteLine("네발로 걷는다"); } } class Whale : Mammal { public override void Move() { Console.WriteLine("수영한다"); } } class Human : Mammal { public override void Move() { Console.WriteLine("두발로 걷는다."); } } class Program { static void Main(string[] args) { Mammal aMammal = new Mammal(); aMammal.Move(); aMammal = new Lion(); aMammal.Move(); aMammal = new Whale(); aMammal.Move(); aMammal = new Human(); aMammal.Move(); } } }
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; namespace _20200603_001 { class Mammal { public virtual void Move() { Console.WriteLine("이동한다"); } } class Lion : Mammal { public override void Move() //override 자리에 아무것도 안적으면 new로 번역한다. { Console.WriteLine("네발로 걷는다"); } } class Whale : Mammal { public override void Move() { Console.WriteLine("수영한다"); } } class Human : Mammal { public override void Move() { Console.WriteLine("두발로 걷는다."); } } class Program { static void Main(string[] args) { //배열 객체 Mammal[] aMammal = new Mammal[4] { new Mammal(), new Lion(), new Whale(), new Human()}; aMammal[0] = new Mammal(); aMammal[1] = new Lion(); aMammal[2] = new Whale(); aMammal[3] = new Human(); //두가지 방법 가능 aMammal[0].Move(); aMammal[1].Move(); aMammal[2].Move(); aMammal[3].Move(); foreach(Mammal Temp in aMammal) { Temp.Move(); } for (int a= 0; a < aMammal.Length;a++) { aMammal[a].Move(); } //두가지 방법 가능 } } }
ToString 오버라이드
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _20200603_003 { public class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public override string ToString() { return "x : " + x + " y : " + y; } } class Program { static void Main(string[] args) { Point pt = new Point(2, 10); Console.WriteLine(pt.ToString()); } } }
오버라이드
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _20200603_004 { class Book { decimal isbn13; string title; string contents; public Book(decimal isbn13, string title, string contents) { this.isbn13 = isbn13; this.title = title; this.contents = contents; } public override bool Equals(object obj) //최상위 클래스의 매개변수 { if(obj==null) //인자로 받은 객체가 null인지 판단 { return false; } Book book = obj as Book; //매개변수가 Book클래스라면 매개변수가 //book에 obj가 가리키고 있는 값을 넘겨 줌 if(book==null) //Book클래스 인지 아닌지 판단. { return false; } return this.isbn13 == book.isbn13; //각 객체 안의 isbn 비교 후 bool이므로 true false 반환 } } class Program { static void Main(string[] args) { Book book1 = new Book(9788998139018, "리버스 엔지니어링 바이블:", ". . . . ."); Book book2 = new Book(9788998139018, "리버스 엔지니어링 바이블:", ". . . . ."); Book book3 = new Book(9788992939409, "파이썬 3.6프로그래밍", ". . . . ."); Console.WriteLine(book1.Equals(book2));//book1과 book2 비교 Console.WriteLine(book2.Equals(book3));//book2와 book3 비교 //isbn 값이 같으면 true 틀리면 false 반환 } } }
메서드 오버로드
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _20200603_005 { class Mathmatics { public int Abs(int value) { return(value >= 0) ? value : -value; } public double Abs(double value) { return (value >= 0) ? value : -value; } public decimal Abs(decimal value) { return (value >= 0) ? value : -value; } } class Program { static void Main(string[] args) { Mathmatics math = new Mathmatics(); Console.WriteLine(math.Abs(-5)); Console.WriteLine(math.Abs(-10.052)); Console.WriteLine(math.Abs(20.01m)); } } }
연산자 오버로드
using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace _20200603_008 { class Market { public int iApple; public int iOrange; public override string ToString() { return "{iApple = " + iApple + ", iOrange = " + iOrange+"}"; } public static Market operator + (Market obj1, Market obj2) { Market obj3 = new Market(); obj3.iApple = obj1.iApple + obj2.iApple; obj3.iOrange = obj1.iOrange + obj2.iOrange; Console.WriteLine("+ 연산자 호출됨"); Console.WriteLine("obj1= " + obj1); Console.WriteLine("obj2= " + obj2); obj2.ToString(); return obj3; } } class Program { static void Main(string[] args) { Market 가게1 = new Market(); Market 가게2 = new Market(); 가게1.iApple = 10; 가게1.iOrange = 10; 가게2.iApple = 100; 가게2.iOrange = 100; Market 가게3 = 가게1 + 가게2; Console.WriteLine("가게3의 iApple과 iOrange는 {0}개", 가게3); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _20200603_009 { class Complex { int Real; int Image; public Complex() { } public Complex(int Real, int Image) { this.Real = Real; this.Image = Image; } public override string ToString() { //{ 3 + 4i } return "{ " + Real + ((Image > 0) ? " + " + Image : " - " + Image * -1) + "i }"; } static public Complex operator + (Complex iNum1, Complex iNum2) { Complex iNum3 = new Complex(); iNum3.Real = iNum1.Real + iNum2.Real; iNum3.Image = iNum1.Image + iNum2.Image; return iNum3; } static public Complex operator -(Complex iNum1, Complex iNum2) { Complex iNum3 = new Complex(); iNum3.Real = iNum1.Real - iNum2.Real; iNum3.Image = iNum1.Image - iNum2.Image; return iNum3; } static public Complex operator *(Complex iNum1, Complex iNum2) { Complex iNum3 = new Complex(); iNum3.Real = (iNum1.Real * iNum2.Real)-(iNum1.Image*iNum2.Image); iNum3.Image = (iNum1.Real * iNum2.Image) + (iNum1.Image * iNum2.Real); return iNum3; } } class Program { static void Main(string[] args) { Complex num1 = new Complex(3,4); Complex num2 = new Complex(5,6); Complex num3 = num1 + num2; Console.WriteLine(num3); Complex num4 = num1 - num2; Console.WriteLine(num4); Complex num5 = num1 * num2; Console.WriteLine(num5); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _20200603_009 { class Complex { int Real; int Image; public Complex() { } public Complex(int Real, int Image) { this.Real = Real; this.Image = Image; } public override string ToString() { //{ 3 + 4i } return "{ " + Real + ((Image > 0) ? " + " + Image : " - " + Image * -1) + "i }"; } static public Complex operator + (Complex iNum1, Complex iNum2) { return new Complex(iNum1.Real + iNum2.Real, iNum1.Image + iNum2.Image); ; } static public Complex operator -(Complex iNum1, Complex iNum2) { return new Complex(iNum1.Real - iNum2.Real, iNum1.Image - iNum2.Image); } static public Complex operator *(Complex iNum1, Complex iNum2) { return new Complex((iNum1.Real * iNum2.Real) - (iNum1.Image * iNum2.Image), (iNum1.Real * iNum2.Image) + (iNum1.Image * iNum2.Real)); } } class Program { static void Main(string[] args) { Complex num1 = new Complex(3,4); Complex num2 = new Complex(5,6); Complex num3 = num1 + num2; Console.WriteLine(num3); Complex num4 = num1 - num2; Console.WriteLine(num4); Complex num5 = num1 * num2; Console.WriteLine(num5); } } }
'C#' 카테고리의 다른 글
C# GitHub, 제네릭, 애트리뷰트, 예외, 스레드 (2020.06.15) (0) 2020.06.15 C# 클래스 간의 형변환, 중첩 클래스, 델리 게이트, 콜백 메서드(교육 14일차) (0) 2020.06.04 C# Object Class(조상)+메서드 4종세트, 배열의 조상(System.Array) base, 다형성 (교육 12일차) (0) 2020.06.02 C# 캡슐화, 정보 은닉, 상속, 클래스 형변환 (교육 11일차) 메모리 주소확인 (0) 2020.06.01 C# 종료자, 정적 멤버, 인스턴스 멤버, 정적 필드,정적 생성자, 네임스페이스(교육10일차) (0) 2020.05.29