【发布时间】:2012-02-28 22:57:52
【问题描述】:
我的代码中有多个类继承结构。 D类继承自C类,C类继承自基类A的B类。它们每个都有TryParse方法。
我的问题是有什么方法可以直接访问您所派生的类,而不是基础类? 如果我是正确的代码库。D 类中的 TryParse 将调用 A.TryParse。 如何从 D 类访问 C.TryParse 或 B.TryParse?
我会更具体地描述我要解决的问题。
我的文件名由很多东西组成。 一般是这样的:
GalleryName-GroupName-PictureName-Dimensions.jpg // picture itself
Example: Domestic-Animals-Dogs-Catching-a-Frisbee-800x600.jpg
GalleryName: Domestic-Animals
GroupName: Dogs
PictureName: Catching-a-Frisbee
Dimensions: 800x600
Extension: jpg
and more variations:
GalleryName-GroupName-PictureName-Dimensions.htm // related htm file
GalleryName-GroupName-PictureName-Dimensions-th.jpg // thumb - notice the -th
我还需要处理该复杂名称的较短部分 - 还包括所有可能的变体:
- GeneralFileName.Extension
- PictureName-Dimension.Extension
- GroupName-PictureName-Dimensions.Extension
- GalleryName-GroupName-PictureName-Dimensions.Extension
- GalleryName-GroupName-PictureName-Dimensions-th.Extension
我想这样解决。
public struct PictureDimension
{
public int Width;
public int Height;
public static bool TryParse( string parseString, out PictureDimension result )
{
// get it done
}
}
class FileNameWithExtension
{
public string FileName { get; private set; }
public string Extension { get; private set; }
public bool TryParse( string parseString )
{
// extract filename from extension
}
}
class PictureDimensionExtensionName : FileNameWithExtension
{
// inhereted from FileNameWithExtension
// public string FileName { get; private set; }
// public string Extension { get; private set; }
public string PictureName { get; private set; }
public PictureDimension Dimension { get; private set; }
public new bool TryParse( string parseString )
{
base.TryParse( parseString );
// get rest of it done
}
}
}
class GroupPictureDimensionExtensionName : PictureDimensionExtensionName
{
// inhereted from PictureDimensionExtensionName
// public string FileName { get; private set; }
// public string Extension { get; private set; }
// public string PictureName { get; private set; }
// public PictureDimension Dimension { get; private set; }
public string GroupName { get; private set; }
public new bool TryParse( string parseString )
{
==> firstAboveBase.TryParse( string parseString );
// get rest of it done
}
}
class GalleryGroupPictureDimensionExtensionName :
GroupPictureDimensionExtensionName
{
public string GalleryName { get; private set; }
public new bool TryParse( string parseString )
{
==> secondAboveBase.TryParse( string parseString );
// get rest of it done
}
}
我不知道有任何关键字,例如 firstAboveBase 和 secondAboveBase。有什么方法可以直接访问您派生的类,而不是基类?
【问题讨论】:
-
你的结构应该是不可变的。
标签: c# inheritance multiple-inheritance