如何在 .NET 中继承并重写资源或其内容
本文关键字:资源 重写 NET 继承 | 更新日期: 2023-09-27 18:34:46
我有一个项目,我们称之为"BASE",它有一堆.CSV 文件作为资源。该项目以不同的方法引用My.Resources.XXXXXXX,其中XXXXXXX是CSV文件名。我正在开发一个派生自"BASE"的类,我想更改一些.CSV 文件,并将"BASE"项目中的那些替换为我的。我希望基本项目中的方法在调用 My.Resources.XXXXXX 时使用我的 CSV 文件,而不是"BASE"的资源中的文件。关于如何做到这一点的任何提示?(欢迎任何 .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