C#接触中产阶级成员-而非基层
我的代码中有多个类继承结构。类D继承自类C,类C继承自类B,类B继承自基类A。每个类都有TryParse方法 我的问题是,有没有办法直接访问您所派生的类,而不是base? 如果我正确,类D中的代码base.TryParse将调用A.TryParse。 如何从D类访问C.TryParse或B.TryParse 我将更具体地描述我试图解决的问题 我有由许多内容组成的文件名。 一般来说是这样的:C#接触中产阶级成员-而非基层,c#,inheritance,multiple-inheritance,C#,Inheritance,Multiple Inheritance,我的代码中有多个类继承结构。类D继承自类C,类C继承自类B,类B继承自基类A。每个类都有TryParse方法 我的问题是,有没有办法直接访问您所派生的类,而不是base? 如果我正确,类D中的代码base.TryParse将调用A.TryParse。 如何从D类访问C.TryParse或B.TryParse 我将更具体地描述我试图解决的问题 我有由许多内容组成的文件名。 一般来说是这样的: GalleryName-GroupName-PictureName-Dimensions.jpg //
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
我还需要处理复杂名称的较短部分-alsmot每种可能的变体:
- GeneralFileName.Extension
- PictureName-Dimension.Extension
- GroupName-PictureName-Dimensions.Extension
- GalleryName-GroupName-PictureName-Dimensions.Extension
- GalleryName-GroupName-PictureName-Dimensions-th.扩展名
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
}
}
我不知道像FirstOverbase和SecondOverbase这样的关键词。是否有任何方法可以直接访问派生自的类,而不是基本类?在您的特定情况下,您可以,因为您没有重写它们
((FileNameWithExtension)this).TryParse(...);
但是,无法调用重写方法的祖父母版本。您使用的是
new
。不要那样做。这就完全消除了多态性,这肯定不是你想要的。根据我的经验,跟踪成员会使代码更难遵循-你为什么要这么做
但是,如果您从类D
调用base.Foo
,该类派生自类C
,并公开了Foo
方法,它将调用C.Foo
示例代码:
using System;
class A
{
public virtual string Foo() { return "A"; }
}
class B : A
{
public override string Foo() { return "B"; }
}
class C : B
{
public override string Foo() { return "C"; }
}
class D : C
{
public override string Foo() { return "D"; }
public void ShowBaseFoo()
{
Console.WriteLine("base.Foo() from D: {0}", base.Foo());
}
}
class Test
{
static void Main()
{
new D().ShowBaseFoo();
}
}
输出:
base.Foo() from D: C
是否可以对所需的父类型执行强制转换
D myVar = New D();
((B)myVar).TryParse(...)
直接从中派生的类,而不是基
base
已指定从中派生的直接类
否则
base
将始终意味着System.Object
(所有类之母)。您的结构应该是不可变的。谢谢。如果我正在覆盖它们呢?那么我如何访问它们呢?除非向父类添加单独命名的方法,否则您将无法访问它们。