我有這樣的基本接口,它描述了卡球員的行爲(人力和AI):如何聲明未指定的方法的參數在C#
interface ICardPlayer<T>
where T: Carta, new()
{
// some methods here
T Pop(UNSPECIFIED ARGUMENTS);
}
流行功能允許玩牌的人從他的甲板棄一張牌,但在這個層面上,我不知道這個玩家是一個人類玩家還是一個AI玩家。 如果是人類玩家,方法將是T Pop(uint index);
,但如果它是AI玩家,方法將是T Pop()
。在這種情況下,該方法必須沒有參數,因爲AI玩家的Pop功能會調用AI的方法來丟棄正確的卡片。 所以我也有這兩個接口:
interface IHumanCardPlayer<T> : ICardPlayer<T>
where T: Carta, new()
{
// some methods here
T Pop(uint index);
}
interface IAICardPlayer<T>
where T: Carta, new()
{
// some methods here
T Pop();
}
我沒有讓所有2種方法:如果玩家是一個人的球員,他有打電話給Pop方法給它卡的索引他會拋棄它,而且他不能在沒有參數的情況下調用該方法。 同樣是如果它是一個AI玩家:他必須調用Pop方法而不給它任何參數,並且他不能調用方法Pop(index)
。
那麼,有沒有辦法在ICardPlayer<T>
接口中編寫Pop(UNSPECIFIED ARGUMENTS)
或者我是否必須編寫2個不同的Pop方法而不使用繼承?
您可以將默認值分配給參數並檢查該值。例如'T Pop(uint index = -1);' – Wjdavis5
接口的要點是隱藏實現的細節並確保每個實例都具有相同的API。爲什麼不用'T Pop(uint index)'定義接口,並且簡單地忽略AI中的參數。 – Toxantron
或使它成爲可空'T Pop(uint?index);' – Wjdavis5