C# 상속
Car.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace ParkingManagement
{
class Car //설계도
{
public string PlateNumber { get; } //private라는 접근제한자를 가지고 있음 -> 공개해야함 / 멤버변수 plateNumber 만듦
public bool IsSUV { get; } //get만 가능, 읽기전용 속성 set은 허락해주는 것
public DateTime InTime { get; } //몇시에 들어와서 언제 나갔나 멤버변수에 포함
public DateTime OutTime;
public int Duration; // 주차시간(분) - 정수형 변수 / 멤버변수 추가 interger형으로 멤버변수 추가
public int PartCharge; // 주차요금(원)
private int age;
public int Age //접근제한자만 public 소문자 age와 대문자 Age를 엮어놓기만 하면 됨
{
get { return age; } //대문자 Age가 외부에서 진짜 나이를 알고 싶을 때 소문자 age를 들고가라
set
{
age = (value > 0) ? value : age;
//외부에서 알려준 값이 음수라면 오류로 설정을 할 수 있음
} //set 부분에 외부 value에서 의미가 있을 때 받아드리고 외부에서 제공한 값을 넣어주면 됨
}
public Car(string plate, bool isSUV) //bool true or false //생성자
{
Console.WriteLine("Car 생성자");
PlateNumber = plate; //위에서 정의하고 있는 public 멤버변수값을 결정할수 있음 / PlateNumber 매개변수값으로 겨정
IsSUV = isSUV;
InTime = DateTime.Now;
}
public Car() { }
}
class Bike : Car //자동차 클래스로부터 상속 받는 다
{
public string Maker;
public Bike(string plate) :base(plate, false)
{
Console.WriteLine("Bike 생성자");
}
}
}
Program.cs
using System;
namespace ParkingManagement
{
class Park
{
static int baseCharge1 = 1000; // 소형 기본(30분) static 넣어서 정적멤버로 바꿈
static int baseCharge2 = 1500; // 대형 기본(30분)
static int Rate1 = 500; // 소형 요율(30분)
static int Rate2 = 700; // 대형 요율(30분)
static void CalculateCharge(Car car) //요금계산하는 메서드 -> 메서드 반환을 생각해야함 void유요하지 않다, 빈손으로 돌아간다
{
Random rnd = new Random();
car.OutTime = car.InTime.AddMinutes(rnd.Next(200));
TimeSpan duration = car.OutTime - car.InTime;
car.Duration=(int)duration.TotalMinutes;
if (car.Duration <= 30)
{
if(car.IsSUV == true)
{
car.PartCharge = baseCharge2;
}
else
{
car.PartCharge = baseCharge1;
}
}
else
{
if (car.IsSUV == true)
{
car.PartCharge = baseCharge2 +
(int)Math.Ceiling((car.Duration-30)/30.0)*Rate2; //정수 나누기 정수가 안되서 30.0으로 바꿈
}
else
{
car.PartCharge = baseCharge1 +
(int)Math.Ceiling((car.Duration - 30) / 30.0) * Rate1;
}
}
}
//다음 난수를 만들어줘 //결과값 정수 정수값으로 반환으로 정의해도 됨, 자동차 설계도에 사용하지 않았던 멤버변수
static void Main(string[] args) //진입점
{
Bike bike = new Bike("경남 1234"); //바이크의 이름을 소문자 바이크로 하라
bike.Maker = "harley Davidson";
bike.Age = 10;
Console.WriteLine("{0},{1},{2},{3}", bike.PlateNumber,bike.Maker,bike.Age,bike.IsSUV);
/* Car car = new Car("1234", false);
Car car1 = new Car();
car.Age = 10;
car.Age = -5;
Console.WriteLine(car.Age);
CalculateCharge(car);
Console.WriteLine("차량번호: {0}, 입차: {1}, 출자: {2}",
car.PlateNumber, car.InTime, car.OutTime);
Console.WriteLine("주차시간: {0}, 요금: {1}",
car.Duration, car.PartCharge); */
}
}
}
Car.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace ParkingManagement
{
class Car //설계도
{
public string PlateNumber { get; } //private라는 접근제한자를 가지고 있음 -> 공개해야함 / 멤버변수 plateNumber 만듦
public bool IsSUV { get; } //get만 가능, 읽기전용 속성 set은 허락해주는 것
public DateTime InTime { get; } //몇시에 들어와서 언제 나갔나 멤버변수에 포함
public DateTime OutTime;
public int Duration; // 주차시간(분) - 정수형 변수 / 멤버변수 추가 interger형으로 멤버변수 추가
public int PartCharge; // 주차요금(원)
private int age;
public int Age //접근제한자만 public 소문자 age와 대문자 Age를 엮어놓기만 하면 됨
{
get { return age; } //대문자 Age가 외부에서 진짜 나이를 알고 싶을 때 소문자 age를 들고가라
set
{
age = (value > 0) ? value : age;
//외부에서 알려준 값이 음수라면 오류로 설정을 할 수 있음
} //set 부분에 외부 value에서 의미가 있을 때 받아드리고 외부에서 제공한 값을 넣어주면 됨
}
public Car(string plate, bool IsSUV) //bool true or false //생성자
{
Console.WriteLine("Car 생성자");
PlateNumber = plate; //위에서 정의하고 있는 public 멤버변수값을 결정할수 있음 / PlateNumber 매개변수값으로 겨정
this.IsSUV = IsSUV; //이름이 공통일때 this를 사용 나의 IsSUV값을 내가 가지고 있는 멤버변수의 값을 넘겨받은 IsSUV에 넣어달라
InTime = DateTime.Now;
}
public Car() { }
}
class Bike : Car //자동차 클래스로부터 상속 받는 다
{
public string Maker;
public Bike(string plate) : base(plate, false)
{
Console.WriteLine("Bike 생성자"); //자식을 생성하면 어미생성자가 먼저 실행
}
}
}
Program.cs
using System;
namespace ParkingManagement
{
class Park
{
static int baseCharge1 = 1000; // 소형 기본(30분) static 넣어서 정적멤버로 바꿈
static int baseCharge2 = 1500; // 대형 기본(30분)
static int Rate1 = 500; // 소형 요율(30분)
static int Rate2 = 700; // 대형 요율(30분)
static void CalculateCharge(Car car) //요금계산하는 메서드 -> 메서드 반환을 생각해야함 void유요하지 않다, 빈손으로 돌아간다
{
Random rnd = new Random();
car.OutTime = car.InTime.AddMinutes(rnd.Next(200));
TimeSpan duration = car.OutTime - car.InTime;
car.Duration=(int)duration.TotalMinutes;
if (car.Duration <= 30)
{
if(car.IsSUV == true)
{
car.PartCharge = baseCharge2;
}
else
{
car.PartCharge = baseCharge1;
}
}
else
{
if (car.IsSUV == true)
{
car.PartCharge = baseCharge2 +
(int)Math.Ceiling((car.Duration-30)/30.0)*Rate2; //정수 나누기 정수가 안되서 30.0으로 바꿈
}
else
{
car.PartCharge = baseCharge1 +
(int)Math.Ceiling((car.Duration - 30) / 30.0) * Rate1;
}
}
}
//다음 난수를 만들어줘 //결과값 정수 정수값으로 반환으로 정의해도 됨, 자동차 설계도에 사용하지 않았던 멤버변수
static void Main(string[] args) //진입점
{
Bike bike = new Bike("경남 1234"); //바이크의 이름을 소문자 바이크로 하라
bike.Maker = "harley Davidson";
bike.Age = 10;
Console.WriteLine("{0},{1},{2},{3}", bike.PlateNumber,bike.Maker,bike.Age,bike.IsSUV);
Car car2 = bike as Car;
/*Console.WriteLine(bike as Car); //변환이 불가능한 경우는 null값이 할당됨 as 가능이나 불가능을 null로 표현*/
/* Car car = new Car("1234", false);
Car car1 = new Car();
car.Age = 10;
car.Age = -5;
Console.WriteLine(car.Age);
CalculateCharge(car);
Console.WriteLine("차량번호: {0}, 입차: {1}, 출자: {2}",
car.PlateNumber, car.InTime, car.OutTime);
Console.WriteLine("주차시간: {0}, 요금: {1}",
car.Duration, car.PartCharge); */
}
}
}