是否可以将方法限制到特定的命名空间?

问题描述 投票:0回答:1

我在命名空间 Classes.Device 中有一个名为 NetworkDevice 的类和一个方法:

private void DisplayDeviceDetails<T>(T device)
{
    throw new NotImplementedException();
}

如果我做对了,我可以像这样限制 T 的类型:

private void DisplayDeviceDetails<T>(T device) where T : Classes.Device.NetworkDevice
{
    throw new NotImplementedException();
}

因为我将来可能会添加其他设备,所以我想知道是否有一种方法可以将此行为扩展到命名空间 Classes.Devices,例如“where T : Classes.Devices”? 或者创建一个基类“设备”是正确的方法吗?

除了删除约束并通过

检查方法本身之外,我找不到其他任何东西
object.OriginElement.GetType().Namespace

其他信息为5岁以上。

谢谢大家!

c# generics namespaces constraints restriction
1个回答
0
投票

您可以在

Classes.Devices
命名空间中创建基类 DeviceBase:

namespace Classes.Devices
{
    public abstract class DeviceBase
    {
        // Codes...
    }
}

然后,修改您的方法以仅接受从

DeviceBase
派生的类型:

private void DisplayDeviceDetails<T>(T device) where T : Classes.Devices.DeviceBase
{
    throw new NotImplementedException();
}

这样,Classes.Devices 命名空间中继承自 DeviceBase 的任何类都可以传递给 DisplayDeviceDetails 方法。

  • 或者,如果您喜欢更灵活的方法,也可以使用接口。
© www.soinside.com 2019 - 2024. All rights reserved.