Files
ScriptsRuning/Assets/Scripts/Chapter2.cs

310 lines
9.5 KiB
C#
Raw Normal View History

2026-03-01 13:38:37 +09:00
using NUnit.Framework;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
public class Chapter2 : MonoBehaviour
{
// const<73><74> readonly <20><> <20><><EFBFBD><EFBFBD>
// const<73><74> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> static <20><><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EBB0A1>
const int MyConstInt = 1000;
readonly List<int> ints = null;
private decimal myDecimal1, myDecimal2;
// get <20><><EFBFBD><EFBFBD>ȭ
public decimal MyDecimal => myDecimal1 * myDecimal2;
// get,set <20><><EFBFBD><EFBFBD>ȭ
public int MyProperty { get; set; } = 2025;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
public decimal MyDecimal2
{
get => myDecimal1;
private set => myDecimal1 += value;
}
void Start()
{
Panda panda1 = new Panda("Bao Bao");
Panda panda2 = new Panda("Mei Xiang");
Panda panda3 = new Panda("Tian Tian");
Debug.Log("Panda Population: " + Panda.Population);
int a = int.MaxValue;
Debug.Log("Max Int: " + a);
//int b= checked(a + 1); // <20><><EFBFBD><EFBFBD><EFBFBD>÷ο<C3B7> <20>߻<EFBFBD><DFBB><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
//int b = unchecked(a + 1); // <20><><EFBFBD><EFBFBD><EFBFBD>÷ο<C3B7> <20>߻<EFBFBD><DFBB><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int b = a + 1; // <20><EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> unchecked <20><><EFBFBD><EFBFBD>
Debug.Log("Overflowed Int: " + b);
decimal c = decimal.MaxValue;// 10^28 -1 //<2F><>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double<6C><65><EFBFBD><EFBFBD> 10<31><30> <20><><EFBFBD><EFBFBD>
double e = double.MaxValue;// 10^308 -1 // <20>ε<EFBFBD><CEB5>Ҽ<EFBFBD><D2BC><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD>
float d = float.PositiveInfinity;// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>
Debug.Log("Max Decimal: " + c);
Debug.Log("Max Double: " + e);
Debug.Log("Positive Infinity Float: " + d);// Infinity
bool isRaining = false; // 1<><31><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>
BitArray bits = new BitArray(1);// 1<><31>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
bits[0] = true;// <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> false
Debug.Log("Is it raining? " + bits[0]);
StartCoroutine(WaitAndPrint());
Debug.Log("Here's a tab:\t <20><>");
string filePath = @"C:\Users\Username\Documents\UnityProjects";// <20>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> @<40>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20>Ϲ<EFBFBD> <20><><EFBFBD>ڷ<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
Debug.Log("File Path: " + filePath);
string multiLine = @"This is a
multi-line string.
It preserves line breaks and ""spaces"".";
Debug.Log("Multi-line String: " + multiLine);// <20><><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> ''' '''<27><> <20><><EFBFBD><EFBFBD> <20>ٵ<EFBFBD> "<22><> <20>ι<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// $<24><> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>
string testTxt = $@"This is a test file path:
{filePath}
And here's a tab character:\tEnd of tab.";
Debug.Log("Test Text: " + testTxt);
// [,]<5D><> [][]<5D><> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>迭 (<28><><EFBFBD><EFBFBD> ũ<><C5A9> <20><><EFBFBD><EFBFBD><E7B0A2>)
int[,] rect = new int[2, 3];
rect[0, 0] = 1;
rect[1, 2] = 9;
// <20><><EFBFBD>׵<EFBFBD> <20>迭 (<28><EFBFBD><E0B8B6> <20><><EFBFBD>̰<EFBFBD> <20>ٸ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
int[][] jagged = new int[2][];
jagged[0] = new int[3]; // <20><><EFBFBD><EFBFBD> 3
jagged[1] = new int[1]; // <20><><EFBFBD><EFBFBD> 1
jagged[0][0] = 1;
jagged[1][0] = 9;
// static <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><EFBFBD><E8BFAD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD>
Debug.Log("Static Int: " + staticInt);
Debug.Log("myArrar 5: " + myArray[4]);
// string<6E><67> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> null<6C><6C> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD>
decimal myD = default(decimal); // 0 //default<6C><74> <20><><EFBFBD><EFBFBD>
decimal myD2;
Debug.Log("Default Decimal: " + myD);
//Debug.Log("Default Decimal 2: " + myD2);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݵ<EFBFBD><DDB5><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>ؾ<EFBFBD><D8BE><EFBFBD>
//<2F>Ű躯<C5B0><E8BAAF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϴ°<CFB4> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϴ°<CFB4> <20>ִµ<D6B4> <20>Է<EFBFBD><D4B7><EFBFBD> ref, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> out
// out<75><74> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD> <20><EFBFBD><E4B3BB> <20><> <20><><EFBFBD><EFBFBD>
int refValue = 10;// ref<65><66> <20>ݵ<EFBFBD><DDB5><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>ؾ<EFBFBD><D8BE><EFBFBD>
TestRef(ref refValue);
Debug.Log("Ref Value after TestRef: " + refValue);
int outValue1 = 20;// out<75><74> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD> <20>ʾƵ<CABE> <20><>
TestOut(out outValue1, out refValue);
Debug.Log("Out Value1 after TestOut: " + outValue1);
Debug.Log("Out Value2 after TestOut: " + refValue);
//<2F><><EFBFBD><EFBFBD> <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> params
int sum1 = MySum(1, 2, 3);
Debug.Log("Sum1: " + sum1);
// <20><EFBFBD><E2BABB> <20>ʵ<EFBFBD>
MyTestBasicNumber();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>μ<EFBFBD>
MyTestBasicNumber(20, y: 20.5f, z: "<22>ȳ<EFBFBD><C8B3>ϼ<EFBFBD><CFBC><EFBFBD>");
MyTestBasicNumber(y: 15.5f, x: 20, z: "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޶<EFBFBD><DEB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string testNullValue = null;
string testNonNullValue = testNullValue ?? "null <20><><EFBFBD>Դϴ<D4B4>.";// null <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Debug.Log("Test Null Value: " + testNonNullValue);
Debug.Log("Test null value: " + testNullValue?.ToString()); //null <20><><EFBFBD>Ǻ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Debug.Log("Test null value: " + testNullValue.ToString()); // null <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
//<2F><><EFBFBD><EFBFBD>
Debug.Log("Test null value: " + (testNullValue?.ToString() ?? "null <20>̿<EFBFBD><CCBF><EFBFBD>")); // () <20>ʼ<EFBFBD>
// foreach string<6E><67> <20><EFBFBD><EBBFAD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
foreach (char ch in "<22>ȳ<EFBFBD><C8B3>ϼ<EFBFBD><CFBC><EFBFBD>")
{
Debug.Log(ch);
}
// nameof <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> Ȯ<><C8AE>
Debug.Log("myDecimal1 name : " + nameof(myDecimal1));
object obj = new Panda("Bao Bao");
// <20><><EFBFBD><EFBFBD> 1: is <20><><EFBFBD><EFBFBD>
if (obj is Panda panda)
{
Debug.Log($"<22>ٿ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: {panda.Name}");
}
//<2F><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
MyAsset myAsset = new MyAsset();
Debug.Log(myAsset.ClassName);
Debug.Log(myAsset.Liability);
// base test <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
MyAsset myasset = new MyAsset(1);
MyAsset2 myAsset2 = new MyAsset2();
Debug.Log(myAsset2.NetValue);
Asset2 asset2 = myAsset2;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
// overrider<65><72> new <20><><EFBFBD><EFBFBD>
asset2.MyOverrider();// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>۽<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD>
asset2.MyNew();// <20>θ<EFBFBD><CEB8><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>
// sealed <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>żҵ<C5BC> <20><> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EBB0A1>)
asset2.MySealed();//<2F>ڽ<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ұ<EFBFBD> <20>żҵ<C5BC> <20><><EFBFBD><EFBFBD>
MyWindowApi();// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> API ȣ<><C8A3>
}
// extern Ű<><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DllImport <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>
// C#<23><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC> <20>ڵ带 ȣ<><C8A3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
// Windows API<50><49> MessageBox <20>Լ<EFBFBD> ȣ<><C8A3>
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
[ContextMenu("MY Window Open")]
//[ContextMenu("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> api<70><69> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> â <20><><EFBFBD><EFBFBD>")]
public static void MyWindowApi()
{
global::System.IntPtr owner = IntPtr.Zero; // :: <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> System <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
MessageBox(owner, "<22>ȳ<EFBFBD><C8B3>ϼ<EFBFBD><CFBC><EFBFBD>", "<22>׽<EFBFBD>Ʈ", 0);
}
void TestRef(ref int value)
{
value += 5;
}
void TestOut(out int value1,out int value2)
{
value1 = 100;
value2 = 200;
}
int MySum(params int[] numbers)// <20><20><><EFBFBD>·θ<C2B7> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
int sum = 0;
foreach (int num in numbers)
{
sum += num;
}
return sum;
}
//int MySum2(params List<int> numbers)// List <20><><EFBFBD>·<EFBFBD> <20>Ұ<EFBFBD>
//{// C#9<><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD> C# 13<31><33><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// int sum = 0;
// foreach (int num in numbers)
// {
// sum += num;
// }
// return sum;
//}
// <20><EFBFBD><E2BABB> <20>ʵ<EFBFBD>
void MyTestBasicNumber(int x= 10, float y = 5.5f, string z = "Hello")
{
Debug.Log($"x: {x}, y: {y}, z: {z}");
}
// static <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><EFBFBD><E8BFAD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD>
static int staticInt;
int[] myArray = new int[5];
/// <summary>
/// 1<><31> <20>ڿ<EFBFBD> ȣ<><C8A3><EFBFBD>Ǵ<EFBFBD> <20>ڷ<EFBFBD>ƾ <20>޼<EFBFBD><DEBC><EFBFBD>
/// </summary>
///
public System.Collections.IEnumerator WaitAndPrint()
{
yield return new WaitForSeconds(1f);
Console.Write('\a'); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ƽ <20>ֿܼ<DCBC><D6BF><EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
Debug.Log("1 second has passed.");
}
// Update is called once per frame
void Update()
{
}
}
class Panda
{
public string Name;
public static int Population = 0;
/// <summary>
/// Ŭ<><C5AC><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="name">
/// <20≯<EFBFBD>
/// </param>
public Panda(string name)
{
Name = name;
Population = checked(Population++);// checked Ű<><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>÷ο<C3B7> <20>߻<EFBFBD><DFBB><EFBFBD> <20><><EFBFBD>ܸ<EFBFBD> <20>߻<EFBFBD><DFBB><EFBFBD>Ŵ
}
}
class Asset
{
public string name;
/// <summary>
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϴ<C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ص<EFBFBD> <20><>)
/// </summary>
public virtual decimal Liability => 0;
/// <summary>
/// <20>Ϲ<EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
/// </summary>
public decimal Libility2 => 0;
int x = 1;
public Asset(int x) => Debug.Log("this.x + x : " + (this.x+x));
// <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
public Asset() => Debug.Log("Asset <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
/// <summary>
/// <20>߻<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʼ<EFBFBD>
/// </summary>
abstract class Asset2
{
public abstract decimal NetValue { get; }
// overrider, new test
public virtual void MyOverrider() => Debug.Log("Asset2 Overrider");
public virtual void MyNew() => Debug.Log("Asset2 New");
// sealed test <20>Լ<EFBFBD>
public virtual void MySealed() => Debug.Log("Asset2 sealed");
}
class MyAsset : Asset
{
public override decimal Liability => base.Liability;
public string ClassName { get; set; } = nameof(MyAsset);
//public override decimal Liability2 =>base.Libility2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
public MyAsset(int x) : base(x) => Debug.Log("MyAsset <20><><EFBFBD><EFBFBD> base <20><><EFBFBD><EFBFBD>");
// base(x)<29><> <20>θ<EFBFBD><CEB8><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʼ<EFBFBD> <20><><EFBFBD><EFBFBD>
public MyAsset() => Debug.Log("MyAsset <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
class MyAsset2 : Asset2
{
public override decimal NetValue => 2025;
// <20><><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public override void MyOverrider() => Debug.Log("MyAsset2 Overrider");
public new void MyNew() => Debug.Log("MyAsset2 New");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
public sealed override void MySealed() => Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ұ<EFBFBD> <20>żҵ<C5BC>");
}