[英]Expanding a Nested Class in derived class C#
我希望有一個基類,里面有嵌套類 - 並擴展子類中的嵌套類:由於某種原因 - 我無法訪問嵌套派生類NEW(添加)屬性:
public class BaseClass
{
public NestedClass nestedClass {get; set;}
public BaseClass()
{
nestedClass = new NestedClass();
}
public int baseproperty {get; set;}
public class NestedClass
{
public int NestedProperty {get; set;}
}
}
public class Derived : BaseClass
{
public class NestedClass
{
public DeeperNestedClass deeper {get; set;}
public NestedClass()
{
deeper = new DeeperNestedClass();
}
public class DeeperNestedClass
{
public int VeryDeepPropery {get; set;}
}
}
}
Derived MyDerived = new Derived();
MyDerived.nestedClass.deeper <----- Doesn't recognized !
*編輯 - 修復基類中缺少的“類”
首先,您必須在聲明期間指定NestedClass
是一個class
和partial
class
:
public partial class NestedClass // You forgot those two here...
{
public int NestedProperty { get; set; }
}
此外,您不能將嵌套類拆分為兩個單獨的類,即使其中一個派生自另一個類。 您只能在原始基類中進行拆分並將其標記為部分: http : //msdn.microsoft.com/en-us/library/wa80x488(v = vs20).aspx
好吧..至少不是一個理智的方式。 cremor
似乎找到了解決辦法,但我會避開那種代碼。
你基本上有三個問題:
1)您實際上必須從BaseClass.NestedClass
派生Derived.NestedClass
。
2)您的屬性BaseClass.nestedClass
將始終具有BaseClass.nestedClass
的類型,因此您需要將其BaseClass.NestedClass
轉換為訪問deeper
屬性。
3)在Derived
訪問時,您必須確保屬性BaseClass.nestedClass
實際上包含Derived.NestedClass
類型的對象。
public class BaseClass {
public NestedClass nestedClass { get; set; }
public BaseClass() {
nestedClass = new NestedClass();
}
public int baseproperty { get; set; }
public class NestedClass {
public int NestedProperty { get; set; }
}
}
public class Derived : BaseClass {
public Derived() {
nestedClass = new NestedClass();
}
public class NestedClass : BaseClass.NestedClass {
public DeeperNestedClass deeper { get; set; }
public NestedClass() {
deeper = new DeeperNestedClass();
}
public class DeeperNestedClass {
public int VeryDeepPropery { get; set; }
}
}
}
class Program {
static void Main(string[] args) {
Derived derived = new Derived();
BaseClass.NestedClass nestedBase = derived.nestedClass;
Derived.NestedClass nestedDerived = (Derived.NestedClass)nestedBase;
Derived.NestedClass.DeeperNestedClass deeper = nestedDerived.deeper;
int property = deeper.VeryDeepPropery;
}
}
在評論中討論后編輯:也許這樣簡單的東西對你有用嗎?
public class OuterClass {
public OuterClass() {
nestedClass = new NestedClass();
}
public int baseproperty { get; set; }
public NestedClass nestedClass { get; set; }
}
public class NestedClass {
public NestedClass() {
deeper = new DeeperNestedClass();
}
public int NestedProperty { get; set; }
public DeeperNestedClass deeper { get; set; }
}
public class DeeperNestedClass {
public int VeryDeepPropery { get; set; }
}
class Program {
static void Main(string[] args) {
OuterClass outer = new OuterClass();
int property = outer.nestedClass.deeper.VeryDeepPropery;
}
}
您不能將嵌套在不同類中的部分類。
否則,它的全名是什么?
Namespace.BaseClass.NestedClass
或Namespace.Derived.NestedClass
? 對於不同的名稱引用同一個類也沒有意義。
出於同樣的原因,您不能在不同的名稱空間中使用它。
一種可能的解決方案是創建一個接口:
interface INested { }
並使您的BaseClass通用:
class BaseClass<T> where T : INested, new()
{
public T Nested { get; set; }
public BaseClass()
{
Nested = new T();
}
}
class Derived : BaseClass<NestedImpl>
{
Derived()
{
Nested = new NestedImpl();
}
public class NestedImpl : INested
{
public int deeper {get;set;}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.