我在C#/ Xamarin.Forms中遇到了继承/多态问题。我认为我会被允许做多件事,但我不是,而且从我收集到的东西来看,我似乎没有正确地继承,所以首先要做的事情是:< / p>
public abstract partial class CommonCell : ContentView, ICellSection
{
public static readonly BindableProperty TitleProperty = BindableProperty.Create("Title", typeof(string), typeof(CommonCell), default(string));
public string Title
{
get { return (string)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
public CommonCell()
: base()
{
}
public virtual IInputType GetInputType()
{
throw new NotImplementedException();
}
}
在同一个文件中,我还声明了这个派生类:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CellSection<T>: CommonCell where T : View, IInputType
{
private T _inputType;
public T InputType
{
get { return _inputType; }
set { _inputType = value; } //plus more stuff here
}
public CellSection ()
:base()
{
//Layout Initialization
}
public override IInputType GetInputType() //I get an error here (Problem 2)
{
return InputType;
}
}
我只包含一个属性和一个方法来演示我的问题,但还有更多的声明用同样的方法......
当我创建一个新的CellSection时会发生什么,如下所示:
CellSection<TextInput> section1 = new CellSection<TextInput>();
section1.Title = "New Title"; //This line is not allowed
我不允许访问Title属性...
错误讯息:CellSection<TextInput>' does not contain a definition for 'Title'
我已经能够通过将以下代码添加到CellSection<T>
类来访问它:
public string Title
{
get { return base.Title; }
set { base.Title = value; }
}
但这看起来真是太多了不必要和冗余......必须有另一种方式......
我遇到的另一个问题是,我不允许覆盖虚拟方法GetInputType()
,它也在上面的代码中,但这就是我所说的话:
public override IInputType GetInputType()
{
return InputType;
}
错误讯息:'CellSection<T>.GetInputType()': no suitable method found to override
最后一个问题是,当我来自不同的类/文件时,尝试引用/转换CellSection<T>
到ICellSection
(由基类{{1}实现}})
CommonCell
我收到错误信息,表示不允许这样做。
错误讯息:List<ICellSection> Sections = new List<ICellSection> { section1, section2 };
这个我更不确定,因为我不知道它是否可能(无法找到示例),但问题1和2我只是不知道#39;理解为什么不能工作,因为他们看起来很直接......
答案 0 :(得分:1)
每位客户支持员工:
&#34;您是否尝试过将其关闭再打开?&#34;
我:
&#34; Dam&#39;它......是的,是的,我已经把它关掉了又打开了#34;
原来这个问题是Visual Studio或Xamarin错误。我删除了所有相关文件并再次添加(将相同的旧代码复制并粘贴到新文件中)。繁荣!一切都现在正确地继承。我不知道是什么导致了这个问题,因为我认为这将是.projitems文件中的参考问题,但基本上没有对该文件进行任何更改(检查git几行切换位置但是&#39;它)。
如果其他人在将来遇到相同或类似的问题:我在遇到此问题时多次重启Visual Studio。遇到这个问题我至少重启过一次机器。