它不可能創造這樣的限制。您應該在運行時檢查輸入併發出有用的異常錯誤消息。
但是,您可以這樣做:
public interface IWellKnown
{
int PropertyA { get; }
int PropertyB { get; }
}
public abstract class WellKnownBase<T> : IWellKnown
{
IWellKnown.PropertyA { get { return Convert(this.PropertyA); } }
IWellKnown.PropertyB { get { return Convert(this.PropertyB); } }
public T PropertyA { get; }
public T PropertyA { get; }
protected virtual int Convert(T input) { return (int)input; }
}
使用這樣的基類引導一個實現具體的版本,以提供一種方法來轉換爲int
。顯式接口實現提供對類型訪問器的訪問,而「真實」類仍然提供原始類型。
public class WellKnownFloat : WellKnownBase<Float> {}
會爲您提供一個float類。如果類型不是澆注料爲int你可以提供一個自定義轉換器:
public class WellKnownTimeSpan : WellKnownBase<TimeSpan>
{
protected override int Convert(TimeSpan input)
{
return (int)input.TotalMilliseconds;
}
}
順便說一句,使用LINQ和添加的要求,你可以重寫你的函數input.Select(x => x.PropertyA + x.PropertyB)).ToArray()
接口。 PS:請使用VisualStudio檢查代碼,我只是在沒有編譯器支持的情況下將它寫出來;)編譯時錯誤可能很小。
是的你是對的,但如果我需要這些屬性通常是數字,不一定是整數。我把這個問題說錯了,對不起。不過謝謝你的回答。 – NumberFour 2011-05-08 10:08:47