---
# System prepended metadata

title: Lab6-1

---


# 1. Quadrilateral Inheritance Hierarchy

- Write an inheritance hierarchy for classes **Quadrilateral (四邊形)**, **Trapezoid(梯形)**, **Parallelogram(平行四邊形)**, **Rectangle(長方形)**, and **Square(正方形)**

    - The inheritance hierarchy(繼承關係):
        ![image](https://hackmd.io/_uploads/BkImPQFWA.png)


- Specify the instance variables, properties and methods for each class

- The private instance variables of Quadrilateral should be the **x-y coordinate pairs for the four endpoints of the Quadrilateral** (四邊形四個點的座標x, y)
    - So you need to declare $4 * 2 = 8$ variables
## Hint
-  Declare double variables **x1, y1, x2, y2, x3, y3, x4, y4** in **Quadrilateral class**
- Use **get** accessor in Quadrilateral class to let the **derived classes(子類別)** obtain the private instance variables
- Area Formula for the Quadrilateral
    ```csharp
    Math.Abs(x1 * y2 + x2 * y3 + x3 * y4 + x4 * y1 - x2 * y1 - x3 * y2 - x4 * y3 - x1 * y4) / 2 
    ```
    You can use this formula directly in all derived classes

## Demo 
- Write a program that instantiates (建立) objects of your classes and outputs each object’s area (**except Quadrilateral**)

- **Example Test Code( 8 variables ):**
	```csharp
	Trapezoid t = new Trapezoid(2, 5, 8, 5, 10, 0, 0, 0);
	Console.WriteLine(t.Area());
	
	Parallelogram p = new Parallelogram(2, 5, 7, 5, 5, 0, 0, 0);
	Console.WriteLine(p.Area());
	
	Rectangle r = new Rectangle(0, 5, 8, 5, 8, 0, 0, 0);
	Console.WriteLine(r.Area());
	
	Square s = new Square(5, 0, 5, 5, 0, 5, 0, 0);
	Console.WriteLine(s.Area());
	```
    
## Points
- Inherit the right class (In this case, Quadrilateral)
    - 繼承類別需正確，答案也包括在內
- Mind your setter/getter
    - setter/getter有無正確寫好寫對
- Write just one file. 
    - 不要寫成一堆檔案，只能有一個.cs檔
- Don't use Console.Readline() to input data
    - 拜託不要寫Console.Readline()讓我們現場打資料
- If you have questions while doing Lab, you can ask your classmates first.
    - Demo時程式有問題優先問同學，助教人力有限需同時demo，且隨著Lab答案越來越長，通靈難度隨之增加 