성장일기

06/03 스마트팩토리 교육-오버라이딩 본문

프로그래밍언어/C#

06/03 스마트팩토리 교육-오버라이딩

김몽몽 2020. 6. 3. 14:26

○오버로딩과 오버라이딩


 오버로딩 - void teest()

               void test(int A)

              이름은 같고 인자로 다름을 구분

 오버라이딩 - void test(int A) 

                  void test(int A)

                 부모와 자식클래스 둘다 동일하게

 

º메서드=메소드=함수=프로시저 등

 

<소스>

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

namespace _20200602_006
{
class Mammal
{
public virtual void Move()
{
Console.WriteLine("이동한다");
}
}
class Lion : Mammal
{
public override void Move()
{
Console.WriteLine("네발로 걷는다");
}
}
class whale : Mammal
{
public void Move()
{
Console.WriteLine("수영한다");
}
}
class Human : Mammal
{
public void Move()
{
Console.WriteLine("두발로 걷는다.");
}
}

class Program
{
static void Main(string[] args)
{
Mammal aMammal = new Mammal();
aMammal.Move();

aMammal = new Lion();
aMammal.Move();

}
}
}

virtual을 지우면 에러! new밖에 쓸 수 없음

virtual : 객체타입에 맞추어 메소드 호출

자식위주의 컴파일

public override void Move1()일 경우 에러발생

-> 부모이름과 같은 값을 로드하겠다는 뜻인데 Move 와 Move1은 동일하지 않기 때문에

( new는 상속받지 않는 새로운 메서드를 만들겠다는 뜻)

 

부모 클래스에 virtual, 자식클래스에 override

º배열 활용

배열을 만들었지만 활용하지 못함

변수를 만들때 한정 중괄호{}를 사용할 수 있다

foreach문으로 간단하게 쓸 수 있다

 


○base를 이용한 메서드 재사용


중복되는 Console.WriteLine("메인보드 켜기");를 base로 사용할 수 있다

 


○object 기본 메서드 확장


같은 내용 2번

\n은 Console.WriteLine과 같은 효과(줄 띄우기)

위와 같은 결과를 얻을 수 있다

ToString은 int형을 자동적으로 텍스트형으로 바꿔줌

<소스>

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

namespace _20200603_004
{
class Car
{
int iSpeed; // 속도
string sColor; // 색상
string sName; // 이름
string sVender; // 제조사

public override string ToString()
{
return "속 도 : " + iSpeed
+ "\n색 상 : " + sColor
+ "\n이 름 : " + sName
+ "\n제조사 : " + sVender;
}
public void Print()
{
Console.WriteLine(ToString());
//Console.WriteLine("속 도 : 100\n색 상 : 빨캉\n이 름 : 그냥죠\n제조사 : 현다이");
}

public Car(int iSpeed, string sColor, string sName, string sVender)
{
this.iSpeed = iSpeed;
this.sColor = sColor;
this.sName = sName;
this.sVender = sVender;
}
}
class Program
{
static void Main(string[] args)
{
Car aCar = new Car(100, "빨캉", "그냥죠", "현다이");
aCar.Print();
Console.WriteLine(aCar);
}
}
}


메소드에서는 인자검사가 중요