В моем коде есть структура наследования нескольких классов. Класс D наследует от класса C, который наследует от класса B, который наследует от базового класса A. Каждый из них имеет метод TryParse.
Мой вопрос: есть ли какой-нибудь способ получить прямой доступ к классу, из которого вы производите, а не к базовому?
Если я правильно использую код базы. TryParse в классе D вызовет A.TryParse.
Как получить доступ к C.TryParse или B.TryParse из класса D?
Я буду более конкретным, описывая проблему, которую пытаюсь решить.
У меня есть имена файлов, которые состоят из многих вещей.
В общем, это выглядит так:
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-Размеры-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. Есть ли способ получить прямой доступ к классу, из которого вы производите, а не к базовому?