C#.NET4.5 と Visual Studio 2012 Ultimate を使用。
私は現在、ラベル印刷プログラムで抽象クラスを試しています。Ive Used Interfaces before.
インターフェイスを使用して 2 つのクラスを分離しました。うまく機能します。
今、私は次のことを試しています。
1位。私の抽象クラス...
abstract class Label
{
public virtual IList<Microsoft.Reporting.WinForms.ReportParameter> NewReportSetup(string part, string batch, string locn, string wheel, string gear, string length,
string fits, string newbar, string newbarnum, string abs)
{
IList<Microsoft.Reporting.WinForms.ReportParameter> parameters = new List<Microsoft.Reporting.WinForms.ReportParameter>();
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramPart", part));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramBatch", batch));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramLocn", locn));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramWheel", wheel));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramGear", gear));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramLength", length));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramABS", abs));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramBuyer", fits));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramBarCode", newbar));
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramBartxt", newbarnum));
return parameters;
}
}
2番目。マイ ReportShaft はラベルを継承しています...
class ReportShaft : Label
{
public virtual IList<Microsoft.Reporting.WinForms.ReportParameter> NewReportSetup()
{
return new List<Microsoft.Reporting.WinForms.ReportParameter>();
}
}
3番目。マイ フォームは ReportShaft クラスをインスタンス化し、NewReportSetup() を呼び出します...
private void NewReportSetupSHAFT()
{
if(txtABS.Text.ToString() == "" || txtABS.Text == null)
{
txtABS.Text = "N/A";
}
IList<Microsoft.Reporting.WinForms.ReportParameter> param = new List<Microsoft.Reporting.WinForms.ReportParameter>();
param = reportshaft.NewReportSetup(txtNewPart.Text.ToString(),
txtBatch.Text.ToString(), txtLocation.Text.ToString(), txtWheel.Text.ToString(), txtGear.Text.ToString(), txtLength.Text.ToString(),
txtFits.Text.ToString(), txtNewBar.Text.ToString(), txtNewBarNum.Text.ToString(), txtABS.Text.ToString());
reportViewer1.LocalReport.SetParameters(param);
}
これは問題なく動作します(ただし、抽象クラスを間違った方法で使用しているとは思いますが、よくわかりません)。
私の質問は:
新しいレポート クラスを作成したいと考えています。クラスがまったく同じメソッドを呼び出すようにしますが、上位 2 つのパラメーター名を変更し、最後のパラメーター名を完全にスキップできるようにします。
これには、メソッドのオーバーライドが必要ですか? もしそうなら、どのようにこれを行うでしょうか?Label メソッドはVirtual Functionから変更する必要がありますか?
どうもありがとう!
更新::パラメーターについて言及したとき、混乱しているように見えるかもしれません。
抽象クラスから 1 つのメソッドを呼び出したいと言いたいのですが、このラベル クラスとメソッドを継承するレポート クラスで、メソッドの本体を意味する「レポート パラメータ」を変更したいと思います。
この理由は、単純に別のメソッドを作成して、異なるレポートごとにそれを呼び出すと、ほぼ同じメソッドを使用することになるためです。
例を次に示します:: これを変更します。
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramPart", part));
これも..
parameters.Add( new Microsoft.Reporting.WinForms.ReportParameter("paramchanged!!", part));
これは一例です。したがって、私が収集したものから、レポート クラスのラベル クラス メソッドをオーバーライドします。ボディを変更しようとすると、残りのコードを入力する必要があります。私にとっては、同じように見える一連のメソッドで終わることはまだあります。
とにかく、残りを入力することなく「メソッド本体の一部」を変更する方法はありますか?
これで混乱が解消されることを願っています。