ASP.NET Core3.0とRazorの初学者です。
 現在、WinFormsの自作ControlのようなものをRazorを使ったウェブページ開発でもできないかと考えていろいろと試しています。
 次のような関数を書けば同じRazorファイル内では使いまわしてHTMLの生成ができるということを知りました。

@{
    //Hogeを表示する関数を定義する
    void Display(Hoge hoge)
    {
        <p>@hoge.Fuga</p>
    }
}

<p>Hello world</p>
<p>following is hoge list</p>
@{
    //定義した関数を使う側
    foreach(var hoge in hogeList)
    {
        Display(hoge);
    }
}

 ところが、この関数へ外部からアクセスできないかと考え次のようにpublicにすると「'public' がこの項目に対して有効ではありません。」というエラーや(@functionsにすると)「現在のコンテクストにbuilderという名前は存在しません」というエラーが出てコンパイルすることができません。

@{
    public void Display(Hoge hoge)
    {
        <p>@hoge.Fuga</p>
    }
}

 このようにControlのようなものを作ろうとすると以下のサイトで紹介されているようにC#でゴリゴリ書くしかないのでしょうか?
(@helperはCore3.0ではまだ使用することができなさそうです)
参考サイト

 あるいは他に関数の中に直接HTMLタグなどを埋め込んで出力できるような関数を実装する方法があるのでしょうか?
 ご教授のほどよろしくお願いします。