如何在C#3.5中定义超类中的强制转换操作符?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在C#3.5中定义超类中的强制转换操作符?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1877字,纯文字阅读大概需要3分钟。
内容图文
我有一个容器类,用于向标准数据类型添加一些属性,如int,string等.此容器类封装了此类(标准类型)对象的对象.
然后,其他类使用容器类的子类来获取/设置添加的属性.现在我希望子类可以隐式地在它的封装对象和它自己之间进行转换,而不需要额外的代码.
这是我的类的简化示例:
// Container class that encapsulates strings and adds property ToBeChecked
// and should define the cast operators for sub classes, too.
internal class StringContainer
{
protected string _str;
public bool ToBeChecked { get; set; }
public static implicit operator StringContainer(string str)
{
return new StringContainer { _str = str };
}
public static implicit operator string(StringContainer container)
{
return (container != null) ? container._str : null;
}
}
// An example of many sub classes. Its code should be as short as possible.
internal class SubClass : StringContainer
{
// I want to avoid following cast operator definition
// public static implicit operator SubClass(string obj)
// {
// return new SubClass() { _str = obj };
// }
}
// Short code to demosntrate the usings of the implicit casts.
internal class MainClass
{
private static void Main(string[] args)
{
SubClass subClass = "test string"; // ERROR: Cannot convert source type 'string' to 'SubClass'
string testString = subClass; // No error
}
}
我的真实容器类有两个类型参数,一个用于封装对象的类型(string,int,…),另一个用于子类类型(例如SubClass).
我该如何制作代码
SubClass subClass = "test string"; // ERROR: Cannot convert source type 'string' to 'SubClass'
可以通过子类中的最小代码运行吗?
解决方法:
我认为没有办法在基类中定义转换运算符.
基类对子类一无所知,因此没有足够的信息来构造它.例如,如果您的SubClass类型只有一个需要一些参数的构造函数,该怎么办?基类不知道子类,因此无法以任何方式构造它.
也许您可以使用另一种方式来参数化StringContainer类型.例如,您可以将一些函数(类型为Func< ...>的委托)传递给StringContainer类,而不是使用实现继承(子类).这样,用户可以参数化类,隐式转换仍然有效.
内容总结
以上是互联网集市为您收集整理的如何在C#3.5中定义超类中的强制转换操作符?全部内容,希望文章能够帮你解决如何在C#3.5中定义超类中的强制转换操作符?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。