Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 母版页需要来自从System.Web.UI.Page派生的抽象泛型类的属性_C#_Asp.net_.net - Fatal编程技术网

C# 母版页需要来自从System.Web.UI.Page派生的抽象泛型类的属性

C# 母版页需要来自从System.Web.UI.Page派生的抽象泛型类的属性,c#,asp.net,.net,C#,Asp.net,.net,我有两个派生自抽象泛型类的类,该类派生自System.Web.UI.Page。我有一个System.Web.UI.MasterPage,它可能是也可能不是我的两个派生页面类或System.Web.UI.page的母版 问题是泛型类有一个我需要在母版页中访问的属性,但我不知道任何优雅的方法来获取它 这里有一个例子 内容类型: public abstract class Fruit { public int ID { get; set; } //Just an identifier } p

我有两个派生自抽象泛型类的类,该类派生自System.Web.UI.Page。我有一个System.Web.UI.MasterPage,它可能是也可能不是我的两个派生页面类或System.Web.UI.page的母版

问题是泛型类有一个我需要在母版页中访问的属性,但我不知道任何优雅的方法来获取它

这里有一个例子

内容类型:

public abstract class Fruit
{
    public int ID { get; set; } //Just an identifier
}

public class Apple : Fruit {  }

public class Banana : Fruit {  }
页码:

public abstract class FruitPage<T> : System.Web.UI.Page where T : Fruit
{
    public T MyFruit { get; set; } 
}

public class ApplePage : FruitPage<Apple> {  }

public class BananaPage : FruitPage<Banana> {  }
公共抽象类FruitPage:System.Web.UI.Page其中T:Fruit
{
公共T MyFruit{get;set;}
}
公共类ApplePage:FruitPage{}
公共类BananaPage:FruitPage{}
大师:

public partial class FoodMaster : System.Web.UI.MasterPage
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        if (this.Page is FruitPage<Fruit>) //I know this is wrong
        {
            if ((this.Page as FruitPage<Fruit>).MyFruit.ID <= 0) //This too
            { 
                /*
                    I want to get here (this.Page being an ApplePage or BananaPage).  

                    Basically...  if ID<=0 then it is a new (unsaved) "fruit", 
                        and I need to change some MasterPage GUI accordingly. 
                */
            }
        }
    }
}
public分部类FoodMaster:System.Web.UI.MasterPage
{
受保护的覆盖无效加载(事件参数e)
{
基础荷载(e);
如果(this.Page是水果页)//我知道这是错的
{
if((此.Page为果页).MyFruit.ID


您在
FoodMaster
中放置的代码实际上属于FrootPage…这样您就不会有这个问题。它在任何其他情况下都不适用。我也考虑过这一点,但我可能应该提到这一点,我使用的是嵌套的Master。
FoodMaster
实际上是“父级”当然,比如说
FoodFruitMaster
。我想在
FoodMaster
中添加一个方法并从页面调用该方法,但它必须在
FoodFruitMaster
中冒泡出来。我认为这是草率的。“一个协变界面,基本上允许从
foultpage
foultpage
进行强制转换。”这是票,谢谢!
public class FruitPage : System.Web.UI.Page {
   public Fruit MyInnerFruit { get; protected set; }
}

public abstract class FruitPage<T> : FruitPage where T : Fruit
{
   public T MyFruit { 
     get { return (T)MyInnerFruit; } 
     set { MyInnerFruit = value; } 
   }
}

public partial class FoodMaster : System.Web.UI.MasterPage {
    protected override void OnLoad(EventArgs e) {
       base.OnLoad(e);

       var fruitPage = this.Page as FruitPage;
       if (fruitPage != null && fruitPage.MyInnerFruit.ID <= 0) {
          ...
       }
    }
}
public interface IFruitPage<out T> where T : Fruit {
    public T MyFruit { get; }
}

public class FruitPage<T> : Page, IFruitPage<T> where T : Fruit {
    public T MyFruit { get; set; }
}

public class FoodMaster : MasterPage {
    protected override void OnLoad(EventArgs e) {
       base.OnLoad(e);

       var fruitPage = this.Page as IFruitPage<Fruit>;
       if (fruitPage != null && fruitPage.MyFruit.ID <= 0) {
          ...
       }
    }
}