演算子のリロード、クラスからクラスへの変換
演算子のオーバーロード
using System;
namespace _21_12_21
{
public class Kilogram
{
double mass;
public Kilogram(double value)
{
this.mass = value;
}
public Kilogram Add(Kilogram target)
{
return new Kilogram(this.mass + target.mass);
}
public override string ToString()
{
return mass + "kg";
}
public static Kilogram operator +(Kilogram op1, Kilogram op2)
{
return new Kilogram(op1.mass + op2.mass);
}
public static Kilogram operator -(Kilogram op1, Kilogram op2)
{
return new Kilogram(op1.mass - op2.mass);
}
public static Kilogram operator *(Kilogram op1, Kilogram op2)
{
return new Kilogram(op1.mass * op2.mass);
}
public static Kilogram operator /(Kilogram op1, Kilogram op2)
{
return new Kilogram(op1.mass / op2.mass);
}
public static Kilogram operator %(Kilogram op1, Kilogram op2)
{
return new Kilogram(op1.mass % op2.mass);
}
// 증감연산자 오버로딩 : +1, -1씩 증가
static public Kilogram operator ++(Kilogram kg)
{
++kg.mass;
return kg;
}
static public Kilogram operator --(Kilogram kg)
{
--kg.mass;
return kg;
}
// 부정 연산자
static public bool operator !(Kilogram kg)
{
return kg.mass != 5;
}
// 비교연산자
static public bool operator ==(Kilogram a, Kilogram b)
{
return a.mass == b.mass;
}
static public bool operator !=(Kilogram a, Kilogram b)
{
return a.mass != b.mass;
}
}
class Program
{
static void Main(string[] args)
{
Kilogram kg1 = new Kilogram(5);
Kilogram kg2 = new Kilogram(10);
Kilogram kg3 = kg1 + kg2;
Kilogram kg4 = kg1 - kg2;
Kilogram kg5 = kg1 * kg2;
Kilogram kg6 = kg1 / kg2;
Kilogram kg7 = kg1 % kg2;
Console.WriteLine(kg3);
Console.WriteLine(kg4);
Console.WriteLine(kg5);
Console.WriteLine(kg6);
Console.WriteLine(kg7);
++kg1;
Console.WriteLine(kg1);
--kg1;
Console.WriteLine(kg1);
Console.WriteLine(!kg1);
Console.WriteLine(kg1 == kg2);
Console.WriteLine(kg1 != kg2);
}
}
}
クラスからクラスへの変換using System;
namespace _21_12_21
{
public class Currency
{
decimal money;
public decimal Money
{
get { return money; }
}
public Currency(decimal money)
{
this.money = money;
}
}
public class Won : Currency
{
public Won(decimal money) : base(money) { }
public override string ToString()
{
return Money + "Won";
}
static public explicit operator Won(Dollar dollar)
{
return new Won(dollar.Money * 1000m);
}
}
public class Dollar : Currency
{
public Dollar(decimal money) : base(money) { }
public override string ToString()
{
return Money + "Dollar";
}
}
public class Yen : Currency
{
public Yen(decimal money) : base(money) { }
public override string ToString()
{
return Money + "Yen";
}
static public implicit operator Won(Yen yen)
{
return new Won(yen.Money * 13m);
}
}
class Program
{
static void Main(string[] args)
{
Won won = new Won(1000);
Dollar dollar = new Dollar(1);
Yen yen = new Yen(13);
Won won1 = yen; // 암시적 형변환 가능, 명시적 형변환 가능
Won won2 = (Won)dollar; // 암시적 형변환 불가능, 명시적 형변환 가능
Console.WriteLine(won1);
Console.WriteLine(won2);
}
}
}
using System;
namespace _21_12_20
{
class Mammal
{
private int price;
public int Price
{
get { return price; }
}
public void Move()
{
Console.WriteLine("이동한다.");
}
public Mammal(int price)
{
this.price = price;
}
}
class Lion : Mammal
{
public Lion(int price) : base(price)
{
}
public override string ToString()
{
return Price + "Lion";
}
}
class Whale : Mammal
{
public Whale(int price) : base(price)
{
}
public override string ToString()
{
return Price + "Whale";
}
static public implicit operator Lion(Whale whale)
{
return new Lion(whale.Price);
}
}
class Program
{
static void Main(string[] args)
{
Lion lion = new Lion(1);
Whale whale = new Whale(100);
Lion lion2 = (Lion)whale;
Console.WriteLine(lion2);
}
}
}
Reference
この問題について(演算子のリロード、クラスからクラスへの変換), 我々は、より多くの情報をここで見つけました https://velog.io/@helenhihi/연산자-오버로드-클래스-간의-형변환テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol