-
[프랙티컬 C# 연습문제] 1부 - 1장Development/C# 2023. 7. 12. 18:51728x90
문제 1.1
using changename; namespace helloworld { class Program { static void Main(string[] args) { Product pullbread = new Product(95, "풀빵", 210); Console.WriteLine(pullbread.GetPriceIncludingTax()); } } }
namespace changename { public class Product { public int code { get; private set; } public string Name { get; private set; } public int price { get; private set; } public Product(int code, string name, int price) { this.code = code; this.Name = name; this.price = price; } public int GetTax() { return (int)(price * 0.08); } public int GetPriceIncludingTax() { return price + GetTax(); } } }
문제 1.2
namespace changename { class MyClass { public int X { get; set; } public int Y { get; set; } public MyClass(int x, int y) { this.X = x; this.Y = y; } } struct MyStruct { public int X { get; set; } public int Y { get; set; } public MyStruct(int x, int y) { this.X = x; this.Y = y; } } }
using System; using changename; namespace helloworld { class Program { static void PrintObjects(MyClass a, MyStruct b) { Console.WriteLine(String.Format("{0},{1}", a.X, a.Y)); Console.WriteLine(String.Format("{0},{1}", b.X, b.Y)); a.X *= 2; a.Y *= 2; b.X *= 2; b.Y *= 2; } static void Main(string[] args) { MyClass a = new MyClass(10, 20); MyStruct b = new MyStruct(10, 20); PrintObjects(a, b); Console.WriteLine(String.Format("{0},{1}", a.X, a.Y)); Console.WriteLine(String.Format("{0},{1}", b.X, b.Y)); } } }
[결과]
10,20
10,20
20,40
10,20[이유]
MyClass는 참조형이므로 참조형 객체를 인수로 지정하면 객체를 가리키는 참조가 복사되어 메서드에 전달된다. 따라서 객체의 값을 메서드 안에서 변경하면 호출한 쪽의 객체가 그 참조를 통해 변경된다.
MYStruct는 값형이므로 값 자체가 복사되어 메서드에 전달되므로 메서드 안에서 객체의 값을 변경해도 호출한 쪽에서는 영향을 받지 않는다.
문제 1.3
using System; namespace helloworld { public class Person { public string Name { get; set; } public DateTime Birthday { get; set; } public int GetAge() { DateTime today = DateTime.Today; int age = today.Year - Birthday.Year; if (today < Birthday.AddYears(age)) age--; return age; } } public class Student : Person { public int Grade { get; set; } public int ClassNumber { get; set; } public Student(string name, DateTime birthday, int grade, int classNumder) { this.Name = name; this.Birthday = birthday; this.Grade = grade; this.ClassNumber = classNumder; } } class Program { static void Main(string[] args) { Student student = new Student("Judy", new DateTime(1992, 4, 5), 3, 5); Console.WriteLine("{0},{1},{2},{3}", student.Name, student.Birthday, student.Grade, student.ClassNumber); Person copy_person = student; object copy_object = student; } } }
서브 클래스(파생 클래스)의 인스턴스는 슈퍼클래스(기저클래스) 타입 형 변수에 대입할 수 있다.
하지만, 반대는 안 된다.
728x90'Development > C#' 카테고리의 다른 글
[프렉티컬 C# 연습문제] 2부 - 1장 (0) 2023.07.25 [프랙티컬 C# 연습문제] 1부 - 3장 (0) 2023.07.15 [프랙티컬 C# 연습문제] 1부 - 2장 (0) 2023.07.14 [C#] 정적 메서드(static method)와 인스턴스 메서드(instance method) (0) 2023.07.14 [C#] string array를 int array로 변환 (0) 2023.07.10