我正在使用下面的繼承實作 2 種 ByteMessage 創建器類。
abstract class MessageCreater
{
int messageSize;
void validateMessage(byte[] message)
{
if (message.Length!=messageSize)
throw new Exception("Length not proper");
}
}
class XMessageCreater: MessageCreater
{
static readonly int messageSize = 10;
public byte[] Create()
{
byte[] message;
// specific procedure here
validateMessage(message);
return message;
}
}
class YMessageCreater: MessageCreater
{
static readonly int messageSize = 20;
public byte[] Create()
{
// specific procedure here
validateMessage(message);
return message;
}
}
我的問題是,簡而言之,在驗證訊息長度時,messageSize 始終等于 0(這可能是因為父類成員“messageSize”被初始化為 0)。
在 XMessageClass 中驗證時,messageSize 變數應為 10,在 YMessageClass 中應為 20。
你能給我一個線索讓它像這樣作業嗎?不需要使用繼承。
uj5u.com熱心網友回復:
問題是每個類的欄位完全不同,盡管名稱相同。聽起來您想要一個可以覆寫的虛擬屬性:
abstract class MessageCreator
{
protected abstract int messageSize {get;}
void validateMessage(byte[] message)
{
if (message.Length != messageSize)
throw new Exception("Length not proper");
}
}
class XMessageCreator: MessageCreator
{
override int messageSize {get;} = 10;
public byte[] Create()
{
byte[] message;
// specific procedure here
validateMessage(message);
return message;
}
}
class YMessageCreator: MessageCreator
{
override int messageSize {get;} = 20;
public byte[] Create()
{
// specific procedure here
validateMessage(message);
return message;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525730.html
標籤:C#遗产代表抽象类
