Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
如何调用父类&x27;c#中子类的s方法?_C#_Asp.net - Fatal编程技术网

如何调用父类&x27;c#中子类的s方法?

如何调用父类&x27;c#中子类的s方法?,c#,asp.net,C#,Asp.net,我有一个母版页的方法,我用了很多从内容页代码后面。在那些落后的代码中,我有一个被大量复制的方法,所以我想我会把它放在一些我可以继承的东西中。不幸的是,我现在无法从基类调用母版页代码中的方法。我想我应该知道怎么做,我今天可能很愚蠢,但我想不出来 这里有一些代码!请忽略任何嚎叫错误,我只是在头顶上打了这个:) 母版页代码隐藏 public partial class Site : MasterPage { public void MyMethod() { // Do

我有一个母版页的方法,我用了很多从内容页代码后面。在那些落后的代码中,我有一个被大量复制的方法,所以我想我会把它放在一些我可以继承的东西中。不幸的是,我现在无法从基类调用母版页代码中的方法。我想我应该知道怎么做,我今天可能很愚蠢,但我想不出来

这里有一些代码!请忽略任何嚎叫错误,我只是在头顶上打了这个:)

母版页代码隐藏

public partial class Site : MasterPage
{
    public void MyMethod()
    {
        // Do Something...
    }
}
内容(子)页

声明的

不起作用

public class Test : TestClass
{
    protected void Page_Load(object sender, EventArgs e)
    {
        OtherMethod();
    }
}

public class TestClass : Page
{
    public void OtherMethod()
    {
        this.Master.MyMethod();
    }
}
现在,看着它,我直觉地知道“this.Master”不能工作,但我没有任何灯泡熄灭来寻找答案。如何获取对母版页方法的引用

谢谢,
Richard

您必须首先强制转换到MasterPage类的类型(在本例中为Site),然后可以调用代码隐藏类中定义的公共方法

public class TestClass : Page
{
    public void OtherMethod()
    {
        ((Site) this.Master).MyMethod();
    }
}

您必须首先强制转换到MasterPage类的类型(在本例中为Site),然后才能调用代码隐藏类中定义的公共方法

public class TestClass : Page
{
    public void OtherMethod()
    {
        ((Site) this.Master).MyMethod();
    }
}

您应该将此.Master强制转换到站点:

((Site)this.Master).MyMethod();

您应该将此.Master强制转换到站点:

((Site)this.Master).MyMethod();

您必须将此.Master强制转换为类型Site,才能访问Site:MasterPage上定义的方法

public class TestClass : Page
{
    public void OtherMethod()
    {
        ((Site)this.Master).MyMethod();
    }
}

您必须将此.Master强制转换为类型Site,才能访问Site:MasterPage上定义的方法

public class TestClass : Page
{
    public void OtherMethod()
    {
        ((Site)this.Master).MyMethod();
    }
}

是否有任何理由不能将该方法放置到帮助器类而不是母版页中?例如,静态
实用程序
类。如果需要对当前页面或页面上控件的引用,可以将它们作为参数传递给帮助器方法。该方法与母版页中的声明性UI元素交互(在本例中为弹出警报)。有什么原因不能将该方法放置到帮助器类而不是
母版页
?例如,静态
实用程序
类。如果您需要引用当前页面或页面上的控件,可以将它们作为参数传递给帮助器方法。该方法与母版页中的声明性UI元素交互(在本例中为弹出式警报)。您好,抱歉,但所示类型转换是冗余的,因此您的解决方案与此相同。master.MyMethod()@Richard:No,
此.Master.MyMethod
将不起作用,因为
Page.Master
仅作为
母版页键入,而母版页上没有
MyMethod()
方法。我想他想键入的是一个
站点
,这是您正在使用的特定母版页类的名称。啊,对不起,它应该是您从母版页派生的母版页类,即站点。您好,对不起,但显示的类型转换是多余的,因此您的解决方案与此相同。master.MyMethod()@Richard:No,
此.Master.MyMethod
将不起作用,因为
Page.Master
仅作为
母版页键入,而母版页上没有
MyMethod()
方法。我想他想键入的是一个
站点
,这是您正在使用的特定母版页类的名称。啊,对不起,它应该是您从母版页派生的母版页类,即站点。很酷,这似乎有效。奖金问题。。。如果TestClass在一个可重用类库中呢?这将失去“查找”站点的能力。有什么解决方法吗?或者我应该在我的所有web应用程序项目中都包含TestClass吗?希望这有意义!您可以将Site和TestClass都包含在同一个可重用程序集中。很酷,这似乎可行。奖金问题。。。如果TestClass在一个可重用类库中呢?这将失去“查找”站点的能力。有什么解决方法吗?或者我应该在我的所有web应用程序项目中都包含TestClass吗?希望这有意义!您可以在同一个可重用程序集中包含Site和TestClass。