簡體   English   中英

強制類實現方法而不限制C#中的參數

[英]Force a class to implement a method without restricting the parameters in C#

我有一個包含方法void DoCommand();的接口void DoCommand(); 現在,我將強制所有子類繼承基類方法DoCommand() 但是我需要每個類為該方法定義一個不同的參數,以便為具有適當參數的頁面提供服務。

我怎樣才能做到這一點 ? 甚至有可能!

注意:我正在構建一個ASP.NET Web應用程序,並且將實現該方法的頁面已經從頁面基類繼承,因此我認為Interface是我唯一的選擇。 因為在類的繼承中只允許一個基類。


編輯

我希望說明我需要的功能可以幫助您提出更好的設計並堅持使用OOP之類的豐富概念。

我有19頁,每頁都需要一種方法來從此頁中的輸入控件收集數據並將其放在一個對象中(19頁.. 19種對象)

所以我需要Collect(); 被強制執行,那么每個頁面都將適當類型的對象作為參數..是否更有意義?

順便說一句,如果您認為我的設計完全錯誤,歡迎使用全新的設計模式(是)

這是不可能的。 最接近的方法是讓您的方法具有通用性並采用一個通用性參數:

protected abstract void DoCommand<T>(T parameter);

除此之外,您還必須使用某種類型的屬性包(例如NameValueCollection )。

我能想到的最好的是:

interface IBlaBla
{
     void DoCommand(params object[] parameters);
}

然后每個類將參數作為對象序列接收。

否則,您只需要為每個類定義一個全新的方法。

該接口將需要具有所有功能(具有不同的參數)。 沒有理由沒有其他接口

編輯:您可能想要這樣的事情(使用泛型)

public interface ICollect<T>
{
    void Collect(T obj);
}

public class Car : ICollect<Car>
{
    public void Collect(Car obj)
    {
    //Do stuff
    }
}

它沒有任何意義。 這違反了多態性的整個思想:基類(或接口)具有方法,子類提供其自己的實現。 如果您不是要使用通用參數,則子類的方法與基類不同,它們看起來只是具有相同的名稱。 因此,您不能強迫子類實現“某些具有給定名稱但任意參數的例程”。

不,那是不可能的。 但是,您可以嘗試以下操作:

 void DoCommand(params object[] args); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM