我必須實現類將文件傳輸到USB(class USBTransfer
)和通過FTP(class FTPTransfer
)。因爲這兩個類都使用了一些常用的方法(如獲取文件名,讀取一些參數等),所以我在另一個類中實現了這些方法(class FileOperations
)。我繼承了class FileOperations
這兩個類(即class USBTransfer
和class FTPTransfer
)。在C#中的多繼承的解決方法
class FileOperations
{
protected void CommonMethod1();
protected void CommonMethod2();
}
class USBTransfer : FileOperations
{
}
class FTPTransfer : FileOperations
{
}
問題:在文件傳輸操作,我設置不同狀態(未使用狀態機設計模式雖然)。我想用以下結構爲此目的使用ABSTRACT類。
abstract class FileTransferStateMachine
{
//Public
public enum FileTransferStates { Idle = 0, FileCopyingState = 1, SuccessfullyCopiedState = 2 }
public static FileTransferStates CurrentState = FileTransferStates.Idle;
abstract protected void IdleState();
abstract protected void FileCopyingState();
abstract protected void SuccessfullyCopiedState();
}
但在C#中不允許有多重繼承。
問題:我知道我可以使用接口。但你不能有變量,在這種情況下,我的兩個班(即class USBTransfer
和class FTPTransfer
)的都會有自己的變量以下
public enum FileTransferStates { Idle = 0, FileCopyingState = 1, SuccessfullyCopiedState = 2 }
public static FileTransferStates CurrentState = FileTransferStates.Idle;
我想,以減少冗餘並要強制有相同的變量/方法(嗯......接口可以實現相同的方法)。
問題PART-2:我上面提到的,但無論是傳輸操作有像IdleState
,FileCopyingState
或SuccessfullyCopiedState
一些常見的狀態具有其相應的方法(即IdleState()
,FileCopyingState()
或SuccessfullyCopiedState()
)文件傳輸到USB或FTP 。我想要實現這些方法的兩個類(即IdleState()
,FileCopyingState()
或SuccessfullyCopiedState()
)。如果任何類忘記實現任何方法,那麼我應該得到一個編譯器錯誤。基本上,FileTransferStateMachine
應該是一個接口/抽象類,它的方法應該在USBTransfer
和FTPTransfer
類(它們已經繼承另一個稱爲FileOperations
的類)中被覆蓋。
爲什麼在這裏使用'static'?另外爲什麼'FileTransferStates'是一個嵌套類型?刪除這些東西,並將它變成一個界面,在層次結構鏈中添加另一層。 – Igor
'FileTransferStates'是'static',因爲這個變量是在另一個類中讀取的,並且聲明它是靜態的,所以我不需要有一個對象來訪問另一個類中的變量。 – skm
「...是靜態的,因爲這個變量是在另一個類中讀取的」:ouch。 –