测试代码如下: abstract class A
{
protected abstract void Test();
} class B : A
{
protected override void Test()
{
throw new NotImplementedException();
}
} class C : B
{
protected override void Test()
{
C c = new C();
// 可以调有c.Test()函数,但是上面的 b.Test()不能被调用。 B b = new B();
// 无法调用 b.Test()这个函数,请问如何调用?
}
}
注:
由于设计的原因, Test()函数必须是protected的。不能使用public或internal.
{
protected abstract void Test();
} class B : A
{
protected override void Test()
{
throw new NotImplementedException();
}
} class C : B
{
protected override void Test()
{
C c = new C();
// 可以调有c.Test()函数,但是上面的 b.Test()不能被调用。 B b = new B();
// 无法调用 b.Test()这个函数,请问如何调用?
}
}
注:
由于设计的原因, Test()函数必须是protected的。不能使用public或internal.
{
protected abstract void Test();
} class B : A
{
protected override void Test()
{
throw new NotImplementedException();
}
} class C : B
{
protected override void Test()
{
C c = new C();
// 可以调有c.Test()函数,但是上面的 b.Test()不能被调用。 B b = new B();
base.Test();
// 无法调用 b.Test()这个函数,请问如何调用?
}
}
不对哈,那个base.Test()调用的不是b这个instance里的Test,改变了代码的逻辑了. :)
你在C中看不到B 的 protected方法。
{
protected abstract void Test();
} class B : A
{
protected override void Test()
{
Console.WriteLine("B.Test()");
}
} class C : B
{
protected override void Test()
{
// C c = new C();
// 可以调有c.Test()函数,但是上面的 b.Test()不能被调用。 //B b = new B();
base.Test();
// 无法调用 b.Test()这个函数,请问如何调用?
}
public void GetTest()
{
Test();
}
} class Program
{ static void Main(string[] args)
{
C c = new C();
c.GetTest();
Console.ReadKey();
}
}
{
protected abstract void Test(); // __Test()只能被继承类的API中调用。
public void __Test();
} class B : A
{
protected override void Test()
{
throw new NotImplementedException();
}
} class C : B
{
protected override void Test()
{
C c = new C();
c.__Test();
// 可以调有c.Test()函数,但是上面的 b.Test()不能被调用。 B b = new B();
b.__Test();
// 无法调用 b.Test()这个函数,请问如何调用?
}
}
public void __Test();改成: public void __Test()
{
Test();
}
将protected改成internal是否可以呢?至少这个方法只能在你的程序集中调用了,外部看不到你这需求有点过分了。嘿嘿
用这个标记在编辑器中隐藏如何?
这个Attribute是对UI设计器起做用的,在这里好像用不上。
Browsable才是设计器的,这个是VS代码编辑器的。
这个属性可以让指定的方法,在编辑器中隐藏。this.不出现
{
protected abstract void Test();
} class B : A
{
protected override void Test()
{
Console.WriteLine("B.Test()");
}
} class C : B
{
protected override void Test()
{
Console.WriteLine("C.Test()");
}
public void GetBaseTest()
{
base.Test();
}
public void GetThisTest()
{
this.Test();
}
} class Program
{ static void Main(string[] args)
{
C c = new C();
c.GetBaseTest();
c.GetThisTest();
Console.ReadKey();
}
}
输出 :B.Test()
C.Test()
嗯,是我搞错了,不好意思。不过我试了下用这个EditorBrowsable标签放到每个__Test()之上后,当我在C.Test()方法中输入"b."的时候,跳出来的智能感知的函数列表里还是可以看到__Test()这个方法。也有可能是我用错了,没调查 =_=|