どのようにオーバーライドする方法をも組み立て?
-
20-08-2019 - |
質問
私は質問約ェやコマーシャルペーパーなどもに優れます。私もワクワクして開発にも柔軟なコードです。
って出題された問題をオーバー仮想方法です。
現在、私が取り組んでいる地域をサポート。一つのコントロールは、"タグ"をパンくず.そのリストの"タグ"とは、関連するオブジェクトです。
<CSBlog:TagBreadCrumb />
私はタグを利用するadminstratorsを対象に特定のスポットのためのコンテンツを表示レイアウトは、しかしそれらのタグは関連しますが、エンドユーザー例えば、'Home_Main'タグを使用すると、メインパネルのホームページもたくないユーザーを見る。
かにするために使用されています地域のサーバーからのコントロールの描画し、タグの一覧をしていたが変更になることかしたい-しかし私の理解では、これってやることになっているの良さを変更すの芯ます。
いいですが、自分で管理し、本質的にほぼ100%に同じベースの制御がオーバーライド一の方法です。
この方法:
public virtual string FormatTags(string[] tagList)
内部にあるコードをフォーマットにタグを書いていこうと思い、自分のコードはすべて同じものを除き、チェック設定ファイルのための"タグ"です。
私の理解であるかを制御から派生するベース制御とは、私が自分でFormatTags()メソッド-a:はい、そうなります。
私のみ変更が必要な一面ですが、とってこれは何を意味していまコピー元のコードする方法から基底クラスと変更する必要があるでしょう?それだけではな気copyignコードからスポットがないわからないの別の方法を変えずにコードの基底クラスです。
させます。
解決
あなたはまだ派生メソッドを実行し、その結果を操作することができます:
public override string FormatTags(string[] tagList) {
string result = base.FormatTags(tagList);
// do something with result
return result;
}
他のヒント
あなたのケースでは(あなたがパンくずで印刷されてから特定のタグを抑制したい場合は)、あなたは基本メソッドを呼び出す前に、すべての特別なタグを取り除くでしょう。
だからあなたのコードは次のようになります
public override string FormatTags(string[] tagList)
{
// strip special tags
string[] newTagList = stripTags(tagList);
return base.FormatTags(newTagList);
}
あなたは、基本クラスは、出力文字列をフォーマットする方法を理解する必要はありません。この道ます。
あなたが代わりに出力文字列の形式を変更したい場合、その方法は、それが将来のリリースでは、フォーマットの変化する可能性がありますので、、あなたはによって影響されないようにするた、(基本メソッドへの呼び出しをすることはないだろう)。
私の理解であるかを制御から派生するベース制御とは、私が自分でFormatTags()メソッド-a:はい、そうなります。
そ;きのオーバーライドに、独自の実施の基底クラスを設定する必要がある.また
最高の場合の一つであると考え、自然にまかせるってこと:
が手軽に行うことができ、出力ベースのクラスのメソッドをご希望の結果です。
基底クラスを使用していますので、戦略パターンや変異体はそのように単なる代替の実施、適切な部分です。
残念ながらされているとは思いませんが、音のいずれかの者の場合はこちらい書きすることが可能です。
だから私の理解では、私が作成していることです 私のコントロール、ベースから派生 コントロール - と私は自分自身を書くことができます FormatTags()メソッド - それは正しいです。
?
絶対に正しいます。
あなたはあなたの周りの多くのコードをコピーする必要がしていることを発見している場合、あなたはあなたの方法を再構築をご覧ください。あなたがオーバーライドし、その後、あなたがFormatTagsをオーバーライドするとき、あなたに必要なものに変更し、ちょうどあなたが他のメソッドを呼び出すことにより、コピーしたであろうそのコードにアクセスしないであろう他の方法にコピーされるのコードを置きます。
拡張メソッドのを見てみましょう。これらはあなたが編集したり、独自の静的クラスで、あなたの関数を定義することにより、拡張することはできません密封されたクラスの機能を拡張することができます。ここでは(構文エラーを有していてもよい)、私はちょうど書いた例です。
public static class MyExtensions
{
public static string AppendCrazyText(this string s, string crazyText)
{
return s + crazyText;
}
}
さて、これにアクセスするには、私は単純に呼び出すことができます:
string myString = "Hello world";
string myCrazyText = ", lets go crazy!";
string myResult = myString.AppendCrazyText(myCrazyText);