gpt4 book ai didi

c# - 如何在 C# 3.5 的父类(super class)中定义强制转换运算符?

转载 作者:行者123 更新时间:2023-11-30 12:52:45 28 4
gpt4 key购买 nike

我有一个容器类,用于向 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<...> 的委托(delegate))传递给 StringContainer。类(class)。这样,用户可以参数化该类,而您的隐式转换仍然有效。

关于c# - 如何在 C# 3.5 的父类(super class)中定义强制转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3883757/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com