我正在用VB.NET编写我的第一个类库.我的想法是分发这个库,以便其他人可以在他们的应用程序中使用它.
但是,也许是由于我缺乏编写和构建库及其中的类的经验,我注意到方法/属性全部显示在Visual Studio的IntelliSense中.
问题是,它们中的许多只是在库本身内使用,开发人员不应该使用它们(可能会造成灾难)当他们将我的库合并到他们的应用程序中时 - 只有少数应该是可见的,即需要的开发者.
因此,我的问题是:有没有办法从Visual Studio的IntelliSense中隐藏我的库的某些方法/属性?也许类似REM的东西?
提前致谢.
编辑:如上所述 - 这是我的第一个图书馆,我现在明白我的问题可以通过两种方式解释:
1)如何隐藏IntelliSense中的内容
2)如何防止开发人员使用和调用某些方法/属性
当然,我想要的最终结果是开发人员无法访问AT ALL某些方法/属性,即上面的第2号.
非常感谢.我今天刚刚学到了新东西,现在我将学习Access Levels ...
假设我已经在.Net中编写了一个类库(dll),现在我让开发人员在他们的.Net应用程序中使用它.
但是,库本身对于本地编写的开发人员(在C或C++中)也可能是有用的.所以我的问题是我的托管DLL是否可以在C或C++中使用?
如果没有,为什么?也许我必须添加一些特定的代码才能让本机编码器使用它?
谢谢.
编辑:如果其他人对此问题感兴趣,我发现Google Books上的这篇文章介绍了如何使用COM中的Net.classes.
我实际上有两个关于同一问题的问题,但我认为最好将它们分开,因为我认为它们并不相关.
背景:我正在VB.NET中编写一个Windows Mobile软件,其中任务需要连接到邮件服务器以发送和检索电子邮件.因此,我还需要一个Mime解析器(用于解码和编码)电子邮件以获取附件.首先我想,我会写一个小的"hack"来处理这个问题(使用普通的字符串解析),但后来我在CodeProject看到了一个用C#编写的项目我认为我会在我的解决方案中实施.我对C#了解不多,所以我只是从类中创建了一个类库,并在我的VB.NET项目中使用它.当我在普通的Windows计算机上瞄准Net Framework时,这个库工作得非常好,但当我打算制作针对Compact Net Framework的同一个库时,我遇到了麻烦.这是很自然的,因为Compact Net Framework有更多的限制,但实际上我没有得到那么多错误 - 只有两个错误,尽管在代码中的不同位置重复.
其中一个错误是在这个问题的主题中引用的错误,即"方法'没有重载'GetString'取'1'参数".如上所述,我对C#了解不多,所以我将带有错误的类转换为VB-NET,但我仍然不太了解..这是给出上述错误的函数:
public virtual string DecodeToString(string s)
{
byte[] b = DecodeToBytes(s);
if(m_charset != null)
{
//ERROR ON THIS LINE
return System.Text.Encoding.GetEncoding(m_charset).GetString(b);
}
else
{
m_charset = System.Text.Encoding.Default.BodyName;
//ERROR ON THIS LINE
return System.Text.Encoding.Default.GetString(b);
}
}
Run Code Online (Sandbox Code Playgroud)
如果这个类需要完整的源代码,那么我可以在这个帖子中的另一个消息中发布它,或者你可以通过在上面提到的网站上下载代码并查看名为MimeCode的类来找到它. CS.
谁可以帮助我?我可以以某种方式重写上述功能来克服这个问题吗?
我提前感谢你的帮助.
亲切的问候,祝大家新年快乐.
Rgds,moster67
在VB6中,我被告知在测试空字符串时,通过使用以下方法验证字符串的长度来检查它会快得多:
If Len("ABC") = 0 then 'fast
Run Code Online (Sandbox Code Playgroud)
要么
If LenB("ABC") = 0 then 'even faster
Run Code Online (Sandbox Code Playgroud)
代替:
If "ABC" = "" then 'slower
Run Code Online (Sandbox Code Playgroud)
如果在VB.NET中也是如此,你知道吗?谢谢.
我必须承认我不太记得学校里的 HEX 等(25 年前)。无论如何,我有一些十进制格式的值需要转换为十六进制。我正在使用 Excel,但如有必要,我可以在 VBA 中编写一个函数(或通过 VB.NET 中的代码来编写)。
我已经知道十六进制结果应该是什么样子(另一个来源),但我需要使用 Excel 来准确地获得这个结果。十进制输入的来源以及(右)十六进制结果的结果来自 Linux 系统,如果这很重要的话。
正数似乎被正确转换,而负数让我头疼,因为与我想要的结果相比,Excel 在 HEX 的 beinning 中添加了两个额外的字母(两个 FF)。
示例:十进制输入:-524288
我必须获得正确的十六进制输出:FFF80000
在 Excel 中使用公式我得到:FFFFF80000(在十六进制输出的开头我得到了 2 FF)
另一个例子:
十进制输入:-29446758
应该是FE3EAD9A
但在 Excel 中我得到 FFFE3EAD9A
似乎我总是在十六进制输出中获得 2 个额外的 FF。
有人可以(以简单的方式)解释为什么我会得到 2 个额外的 FF 以及我是否可以安全地移除它们?
我需要对包含单词列表的数组进行排序,并使用binarysearch进行搜索.出于某些原因,必须始终使用"en-US"的排序规则(即美国区域设置)对单词列表进行排序.该代码将在各种国际操作系统下运行,当然这意味着将根据使用的本地区域设置对单词列表进行不同的排序.使用立陶宛语区域设置运行的计算机/设备可能会出现一个问题.为什么?因为大多数语言中的字母" Y "在立陶宛语中被排序为X- Y -Z,所以排序顺序是I- Y -J.这种行为会对我的程序造成严重破坏.
在桌面PC上,我可以使用以下方法将区域设置暂时更改为美式英语:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
但是,由于我正在为Windows Mobile(CF.NET)开发,这段代码无法实现.
我找到了一些黑客可以让我以编程方式更改设备上的区域设置,但它们不是"官方"并且被认为是有风险的,所以我更喜欢避免这些.
所以我的问题是:无论设备上设置的区域设置如何,我如何强制Array.Sort和Array.BinarySearch在排序和搜索时使用CultureInfo ="en-US"?
我相信我可以使用:
Public Shared Function BinarySearch(Of T) ( _
array As T(), _
value As T, _
comparer As IComparer(Of T) _
) As Integer
Run Code Online (Sandbox Code Playgroud)
并实现Comparer以考虑CultureInfo(并将其设置为"en-US"),但我不知道如何努力,尽管努力.如果有人可以在VB.Net或C#中发布一些示例代码或者解释如何做,我将非常感激.
如果你知道任何可以在CF.Net中使用的替代解决方案,那么我当然都是耳朵.
谢谢.
编辑:
我会将Twanfosson的答案视为已接受的解决方案,因为我的问题清楚地表明我希望与英语保持联系.
然而,在灵活性方面,我相信Guffa的答案是最好的.为什么?让我们用另一个例子:在德语中,字母Ö按Ö- XZ 排序,而在瑞典语和芬兰语中,顺序是XZ- Ö.在爱沙尼亚语中,排序顺序是Z- Ö- X.复杂,不是吗?Guffa的解决方案将允许我在德国区域设置下运行的设备上强制使用瑞典语排序(更改CultureInfo).使用Comparer.DefaultInvariant及其与英语的关联在这种情况下无济于事,可能是字母Ö最终会以O.因此我的投票将转到Guffa.
我目前正在使用CF.NET在Windows Mobile中编写一个小应用程序.
该应用程序的行为与电子邮件应用程序非常相似,即我使用POP3从我的邮件服务器帐户下载邮件和附件,以存储在存储卡上,以便使用MIME工具进行进一步处理.
我的问题是下载大型附件,因为在某个时刻我得到一个OutOfMemory异常.我在前几天阅读了这里发布的以下问题和答案,从中发现了一些有趣的事情.由于我的附件可达4-5MB(mp3歌曲),我意识到我有严重的问题.然而,同时Pocket Outlook能够下载高达4-5MB的mp3歌曲而没有任何问题(使用WIFI连接)所以必须有办法做到这一点!
目前,我将下载缓冲区(转换为字符串)保存为一个简单的字符串变量.我尝试将缓冲区的内容添加到stringbuilder中,但我仍然得到OutOfMemory-exceptions.
我可以采取什么策略/技术来克服这个问题?
.net email memory-management compact-framework windows-mobile
我正在VB.Net中编写一个类库,并且正在使用我的库的应用程序调用的一个子函数或多或少具有以下语法:
Public Sub LoadDict(ByVal PhoneticType As String, ByVal strDict As String)
Run Code Online (Sandbox Code Playgroud)
其中PhoneticType可以是phonSoundex,phonDoubleMetaphone或noPhonetic
我想让应用程序开发人员在编写上面sub的调用时从列表中选择PhoneticType(我认为它叫做属性参数).这将使开发人员更容易,因为可以避免拼写错误,并且可以避免在使用库时出错.
我认为这完全取决于属性,但尽管尝试过,我还是没有设法让它工作.
任何可以发布示例如何使用属性和包含参数的人.如果争论可以是强制性的,那就更好了.
谢谢.
我是JAVA的新手.我正在JAVA中编写一个包装库,以便使用类似Basic的语言提供一些函数.
当我注意到一些代码没有在JAVA库中执行时我得到了库存,尽管编译器没有抱怨(使用Eclipse).我最后通过替换代码解决了它,如下所示:
public void VideoQuality(int vQuality) //did not work
Run Code Online (Sandbox Code Playgroud)
成
public boolean VideoQuality(int vQuality) //works
Run Code Online (Sandbox Code Playgroud)
以下是完整的代码片段:
public void VideoQuality(int vQuality) //did not work
{if (vQuality==16) {
vidQuality=16;
}
else if (vQuality==-16) {
vidQuality=-16;
}
else if (vQuality==0) {
vidQuality=0;
}
else
vidQuality=-16;
vitamioExt.setVideoQuality(vidQuality);
}
public boolean VideoQuality(int vQuality) //works
{if (vQuality==16) {
vidQuality=16;
}
else if (vQuality==-16) {
vidQuality=-16;
}
else if (vQuality==0) {
vidQuality=0;
}
else
vidQuality=-16;
vitamioExt.setVideoQuality(vidQuality);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我认为void对应于Visual Basic中的sub,而boolean对应于一个函数.
我发现奇怪的是,以下代码使用void工作 …