如何在 .NET 中继承并重写资源或其内容

本文关键字:资源 重写 NET 继承 | 更新日期: 2023-09-27 18:34:46

我有一个项目,我们称之为"BASE",它有一堆.CSV 文件作为资源。该项目以不同的方法引用My.Resources.XXXXXXX,其中XXXXXXX是CSV文件名。我正在开发一个派生自"BASE"的类,我想更改一些.CSV 文件,并将"BASE"项目中的那些替换为我的。我希望基本项目中的方法在调用 My.Resources.XXXXXX 时使用我的 CSV 文件,而不是"BASE"的资源中的文件。关于如何做到这一点的任何提示?(欢迎任何 .NET 语言(

如何在 .NET 中继承并重写资源或其内容

这有点笨拙,但效果很好:

在派生类中:

Public Class MyApplication
    Inherits BaseApplication
    Private Shared Property ResourceManager As New MyResourceManager
    Shared Sub New()
        Const fieldName As String = "resourceMan"
        'set base resource manager to my specialized resource manager using reflection'
        ReflectionHelper.SetStaticFieldValue(ResourceManager.BaseResourceManagerType, fieldName, ResourceManager)
    End Sub
    ...
End Class

我的自定义资源管理器:

Public Class MyResourceManager
    Inherits ResourceManager
    Public Property BaseResourceManager As ResourceManager
    Public Property BaseResourceManagerType As Type
    Public Property MyResourceManager As ResourceManager = My.Resources.ResourceManager
    Public Sub New()
        MyBase.New()
        'get a reference to the resource manager for the base application to keep it around'
        Dim ass As Assembly = Assembly.Load("BaseApplication")
        BaseResourceManagerType = ass.GetType("BaseApplication.My.Resources.Resources")
        BaseResourceManager = ReflectionHelper.GetStaticPropertyValue(BaseResourceManagerType, "ResourceManager")
    End Sub
    Public Overrides Function GetString(ByVal name As String) As String
        Dim ret As String = MyResourceManager.GetString(name)
        If ret IsNot Nothing Then
            Return ret
        Else
            Return BaseResourceManager.GetString(name)
        End If
    End Function
    ... <override all the other members of ResourceManager in the same fashion as above>
End Class