我必须实现类将文件传输到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。 –