擴充方法

一、後端 Person 實體程式碼(C#)

public class Person
{
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private int age;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    //無參數建構子
    public Person(){}
    //帶參數建構子
    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    //無參數實例方法
    public string getMyName()
    {
        return this.name;
    }

    //多參數實例方法
    public string JoinStr(string str1, string str2)
    {
        return str1 + str2;
    }
}Code language: C# (cs)

cs後端程式碼設定物件變數

Person pTest = new Person("Tom", 22);
context.Put("pTest", pTest);Code language: JavaScript (javascript)

二、VTL 樣板程式碼 & 渲染說明

方法的呼叫<br />
$pTest.getMyName();

#set($a = "hello")
#set($b = "foxdevelop")

$pTest.JoinStr($a, $b);Code language: PHP (php)
1. $pTest.getMyName()
  • 呼叫物件無參數方法 getMyName()
  • 回傳 Tom

✅ Velocity 呼叫無參方法:括號()可以省略,$pTest.getMyName 等同 $pTest.getMyName()

2. $pTest.JoinStr($a, $b)
  • 呼叫帶兩個字串參數的方法
  • VTL 會先解析 $a$b,傳入實際參數 "hello""foxdevelop"
  • 回傳拼接結果:hellofoxdevelop

總結

  1. 方法名稱大小寫必須完全相符
    C# getMyName()GetMyName(),樣板寫法要和程式碼保持一致。
  2. 直接傳入變數
    不需要額外加引號,$pTest.JoinStr($a,$b) 寫法正確;不要寫成 $pTest.JoinStr("$a","$b")(會傳入字串字面”$a”)
  3. 屬性與方法的區別
  • $pTest.Name → 存取屬性(getter)
  • $pTest.getMyName() → 呼叫方法
  1. 回傳值自動輸出
    樣板內直接寫 $物件.方法(),Velocity會自動輸出方法回傳值;不想輸出時使用 #set 接收結果:
#set($result = $pTest.JoinStr($a,$b))Code language: PHP (php)

三、頁面最終渲染結果

方法的呼叫
Tom;

hellofoxdevelop;

擴充方法

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *