是否有可能在.NET 3.5上用C#创建VB.net模块?
我需要使用VB.net的某些功能,这是我的Asp.net MVC项目的模块。但是我发现C#不能像VB.net那样处理模块。请看下面的代码。是否有可能在.NET 3.5上用C#创建VB.net模块?
VB.Net - 全球化项目
Public Module [Module Name]
Public Const WebsiteName As String = "[My Website Name]"
End Module
VB.Net - Asp.net MVC查看页面
<%@ Import Namespace="[Globalization Project Namespace]" %>
<%= WebsiteName %>
C#.NET - Asp.net MVC查看页面
<%@ Import Namespace="[Globalization Project Namespace]" %>
<%= WebsiteName // Error because C# doesn't understand this statement %>
<%= [Module Name].WebsiteName // It works fine. %>
我认为C#可以看到像类一样的所有模块。所以,我不能直接调用它没有给模块名称。你有解决这个问题的想法吗?
PS.1我知道。模块不正确OOP。但它短暂而强大。
PS.2我可以使用VB.net进行全球化项目,因为所有的源代码都将由我的自定义宏生成。但我不喜欢在VB.net中编写源代码。所以,我不使用VB.net作为Asp.net MVC View Page或其他项目的主要语言。
感谢,
静态类是C#相当于一个VB模块:
public static class MyCSharpModule
{
public const string WebsiteName = "[My Website Name]";
}
嗯,这是从模块的C#用户相同的,因为在C#中,你必须指定类名,即使是创建为VB模块。如果从VB引用,你需要的,如果它来自一个C#DLL到指定的类名,但如果它来自一个VB DLL ...
你可以尝试使用一些推广到Page类:
public static class MyExtentions
{
public static string WebsiteName(this System.Web.Mvc.ViewMasterPage page)
{
return "[My Website Name]";
}
}
在页面,你会称其为网页上的方法:使用
<%= WebsiteName(); %>
不等同。因为我必须在调用其属性的字段之前指定类名称。 – 2009-07-23 09:32:40
我只是试试它。但我需要使用这个关键字来调用你的方法。而且,这个想法不能用于另一种情况,因为它是扩展方法。 – 2009-07-23 09:42:03
没有直接等价于C#中的VB.NET模块,然而,对于大多数应用中,我发现一个公共的静态类(在你最“*”的命名空间)就足够了。
(尽管如此,您仍然必须使用类名称限定成员和方法)。
喜欢的东西:
namespace MyApplication
{
public static class Globals
{
public const string app_name = "This is my application name!";
}
}
,并使用它像这样:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string s = Globals.app_name;
}
}
}
对于全球可用的恒定值(如应用程序名称,版本号等),它通常工作得很好。
我发现了一些可能性。让我们看看我的源代码。
C# - 全球化项目
namespace [SolutionName].Globalization.Shared
{
public class Site : System.Web.Mvc.ViewMasterPage
{
public static [PropertyName] { get;set; }
}
}
我想,你知道什么会发生下一次!
C# - Asp.net MVC查看页面在同一视图部分
<%@ Master Language="C#" Inherits="[SolutionName].Globalization.Shared.Site" %>
<%@ Import Namespace="[SolutionName].Globalization.Shared" %>
<%= [PropertyName] %>
C# - Asp.net MVC查看页面在同一视图部分
<%@ Import Namespace="[SolutionName].Globalization.Shared" %>
<%= Site.[PropertyName] %>
C# - 天冬氨酸.net MVC查看页面不同查看区域
<%@ Import Namespace="[SolutionName].Globalization" %>
<%= Shared.Site.[PropertyName] %>
对不对?我认为这是非常漂亮的源代码。你有什么建议吗?请告诉我。
PS.1我唯一担心的就是我的全球化项目。这很奇怪,因为这个项目中的类几乎都是从Asp.net MVC项目中的View Page类继承而来的。
PS.2别担心创建上面的代码。因为我将使用VS宏来生成&修改所有这些。
感谢,
请看看我的答案。 – 2009-07-23 09:36:45