728x90
메소드 오버로딩
1 2 3 4 5 6 7 8 9 10 11 12 13 | int Plus(int a, int b) { return a + b; } double Plus(doubl a, double b) { return a + b; } // int result1 = Plus(1, 2); double result2 = Plus(3.1, 2.4); | cs |
새로운 이름을 붙이지않고 하나의 메소드 이름에 여러개의 구현을 올림.
이름에 대한 고민을 줄여주고 코드의 일관성을 유지해주며, 생산성을 높인다.
객체지향 프로그래밍
객체는 데이터와 메소드로 이루어진다.
: 속성은 데이터(변수), 기능은 메소드
Class는 객체를 만들기위한 청사진
붕어빵 틀이 클래스, 붕어빵은 객체
1 2 3 4 5 | class 클래스 이름 { // 데이터와 메소드 } | cs |
고양이를 추상화하기
1 2 3 4 5 6 7 8 9 | class Cat { public string Name; public string Color; // 고양이의 속성(이름과 색)은 데이터 public void Meow() // 기능("야옹"은 메소드 { Console.WriteLine("{0} : 야옹", Name); } | cs |
위의 코드에서 Cat class에 선언된 Name,Color와 같은 클래스안에 선언된 변수들을 Field라고 한다.
Cat class은 청사진으로 실체(instance)는 아니다. 고양이 한마리의 이름과 색깔들을 정의해주어야 한다.
Cat 객체 생성
1 2 3 4 5 6 | //kitty라는 객체를 생성 Cat kitty = new Cat(); kitty.Color = "white"; kitty.Name = "kitty"; Kitty.Mew(); Console.WriteLine("{0} : {1}", kitty.Name, kitty.Color); | cs |
1 | Cat kitty = new Cat(); | cs |
에서 cat()은 생성자.
new 키워드는 생성자를 호출해서 객체를 생성하는데 사용하는 연산자
this 키워드
1 2 3 4 5 6 7 8 9 10 | class Employee { private string Name; public void SetName(string Name) { this.Name = Name; } } // | cs |
위의 코드에서 class Employee의 field도 Name,
SetName의 매개변수도 Name이다. (string Name)
this는 이런 모호성을 해결할 수 있는 키워드.
this.Name은 Employee 필드를 가리키고 오른쪽의 Name은 SetName() 메소드의 매개 변수를 가리킨다.
this() 생성자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class MyClass { int a, b, c; public MyClass() { this.a = 5425; } public MyClass(int b) { this.a = 5425; this.b = b; } public MyClass(int b, int c) { this.a = 5425; this.b = b; this.c = c; } | cs |
위 소스를 보면 문법적 문제는 없다. 다만 세개의 MyClass() 생성자안에 중복되는 코드들이 들어가있는데,
이것을 this() 생성자를 이용해 코드를 개선할 수 있다.
- using System;
- namespace ThisConstructor
- {
- class MyClass
- {
- int a, b, c;
- public MyClass()
- {
- this.a = 10;
- }
- public MyClass(int b) : this() //this()가 9행의 MyClass()를 호출
- {
- this.b = 20;
- }
- public MyClass(int b, int c) : this(b) //14행의 class호출
- {
- this.c = 30;
- }
- public void PrintFields()
- {
- Console.WriteLine("a:{0}, b:{1}, c:{2}", a, b, c);
- }
- }
- class MainApp
- {
- static void Main(string[] args)
- {
- MyClass a = new MyClass();
- a.PrintFields();
- MyClass b = new MyClass(0);
- b.PrintFields();
- MyClass c = new MyClass(0, 0);
- c.PrintFields();
- }
- }
stdout
a:10, b:0, c:0
a:10, b:20, c:0
a:10, b:20, c:30
C# 성적관리 프로그램
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Student_Score
{
class STUDENT
{
public string name;
public int Kor;
public int Eng;
public int Tot;
public double ag;
public int grd;
public string Total(string a, string b)
{
string temp = (int.Parse(a) + int.Parse(b)).ToString();
return temp;
}
public string Avg(string a, string b)
{
string temp = ((int.Parse(a) + int.Parse(b)) / 2).ToString();
return temp;
}
public string Grade(double ag)
{
string grade;
if (90 >= ag)
grade = "A";
else if (80 >= ag)
grade = "B";
else if (70 >= ag)
grade = "C";
else
grade = "F";
return grade;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("학생정보 입력");
STUDENT s1 = new STUDENT();
Console.Write("이름 : ");
s1.name = Console.ReadLine();
Console.Write("국어성적 : ");
s1.Kor = int.Parse(Console.ReadLine());
Console.Write("영어성적 : ");
s1.Eng = int.Parse(Console.ReadLine());
s1.Tot = s1.Kor + s1.Eng;
s1.ag = (s1.Kor + s1.Eng) / (double)2;
Console.WriteLine("====================================================================================");
Console.WriteLine("이름" + "\t" + "국어" + "\t" + "영어" + "\t" + "총점" + "\t" + "평균" + "\t" + "등급");
Console.WriteLine(s1.name + "\t" + s1.Kor + "\t" + s1.Eng + "\t" + s1.Tot + "\t" + s1.ag + "\t" + s1.Grade(s1.ag));
}
}
} |
Output :
'Study > C#' 카테고리의 다른 글
c# 복습 (0) | 2017.03.31 |
---|---|
headfirst c#-wpf (0) | 2016.11.19 |
5/27 업무일지 c#학생성적관리(콘솔) (0) | 2016.05.27 |
c# 클래스 복습2 (0) | 2016.05.23 |
c# 스터디일지 -클래스 (0) | 2016.05.22 |