我有一个接口和一个在同一个程序集中定义的抽象基类:
IFoo.cs:
internal interface IFoo { ... }
Run Code Online (Sandbox Code Playgroud)
Base.cs:
public abstract class Base
{
internal protected Base(IFoo foo) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这会生成以下编译器错误:
CS0051: Inconsistent accessibility: parameter type 'IFoo' is less
accessible than method 'Base.Base(IFoo)'
Run Code Online (Sandbox Code Playgroud)
如果我将Base类构造函数设置为仅内部,则错误消失.由于该类是抽象的,可能在可访问性中添加受保护并不能完成任何事情......
不过,我不明白这个错误.MSDN将'protected internal'定义为
"访问仅限于当前程序集或从包含类派生的类型"
内部接口IFoo如何比内部受保护的构造函数更难访问?
我正在用C++编写一个库.我的图书馆里有两门课,A而且B.我想隐藏A()任何引用我的库的代码中的构造函数.我也希望类B能够调用A()构造函数.
我来自C#背景,并且很少记住我的C++.在C#中,我只是将A()构造函数声明为internal.我已经读过,在C++中最接近的方法是friend声明和前向声明的组合.我该怎么做呢?以下是我的三个文件:
啊:
#pragma once
class A
{
private:
A();
};
Run Code Online (Sandbox Code Playgroud)
BH
#pragma once
class A;
class B
{
public:
A createA();
};
Run Code Online (Sandbox Code Playgroud)
B.cpp:
#include "A.h"
#include "B.h"
A B::createA()
{
A result; //cannot access private member declare in class 'A'
return result;
}
Run Code Online (Sandbox Code Playgroud)
我试过把它添加到啊:
public: friend A createA();
Run Code Online (Sandbox Code Playgroud)
我反而尝试将此添加到Ah并带有相应的前向声明:
public: friend A B::createA();
Run Code Online (Sandbox Code Playgroud)
我反而尝试添加和extern class B;Ah并使B成为这样的类:
public: friend class B;
Run Code Online (Sandbox Code Playgroud)
我不知所措. …
刚刚完成我的第一个mvc4应用程序.一切都很好,直到我部署它,我得到:500 - 内部服务器错误.您正在查找的资源存在问题,无法显示.每次我尝试呼叫/帐户/注册或/帐户/登录控制器:
我在firefox控制台和小提琴手里偷偷摸摸.我没有找到任何有用的东西,但是我再也不知道我应该寻找什么.
其他一些帖子说检查服务器日志,但这本身就是一个问题,因为当我尝试下载,移动,查看或删除最新的日志文件时,我收到"文件传输失败","550无法访问文件"," 500无法删除文件".
我不知道还能做什么,有些请指教.下面是一些用于调用Login控制器的代码.我不会发布注册版本,因为它们似乎相关.
Ajax调用:
$.ajax({
url: "/Account/Login",
type: "POST",
data: $('#loginForm').serialize(),
success: function (resultData) {
if (resultData.ok) {
...unrelated stuff...has call to resultData.message
}
}
});
Run Code Online (Sandbox Code Playgroud)
登录控制器:
[AllowAnonymous]
[HttpPost]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return Json(new { ok = true, message = "Login successful." });
}
else
{
return Json(new { ok = false, message = "The username or password you entered is invalid. Please try again." …Run Code Online (Sandbox Code Playgroud) 例如:
internal class C
{
public void M()
{
Console.WriteLine("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这是一个 " 任何人都可以访问的方法,无论生成在只能从同一程序集中的代码访问的类中的程序集 ".
我对编译器的经验告诉我,如果我做了类似的事情并且没有得到警告,那么可能有一个合理的理由.
所以,我想也是
(如果是2,这不是试图抱怨它 - 我只想了解)
考虑以下课程
public class Entity {
public void Foo() { ... }
internal void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)
如你所见,它有一个public方法和一个internal方法.现在,我想创建一个接口,允许我在测试中模拟这个类(在这个程序集和其他程序集中).我重写我的代码如下:
public interface IEntity {
void Foo();
}
internal class Entity : IEntity {
public void Foo() { ... }
public void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生另一个问题.当在同一个程序集中的另一个方法中使用该类时,我再也无法调用Bar:
public class OtherClass {
public void SomeMethod(IEntity entity) {
entity.Bar(); // error!
}
}
Run Code Online (Sandbox Code Playgroud)
像这样重写代码:
public class OtherClass {
public void SomeMethod(IEntity entity) {
(entity as Entity).Bar(); // …Run Code Online (Sandbox Code Playgroud) 可以[assembly: InternalsVisibleTo("NameOfOtherAssembly")]在 AssemblyInfo.cs 中指定。
但是是否可以将其限制为特定的内部功能?
例如,是否有可以应用于每个功能的属性?
[InternalVisibleTo("NameOfOtherAssembly")]
internal void ShouldBeVisible()
{}
internal void ShouldNotBeVisible()
{}
Run Code Online (Sandbox Code Playgroud)
如果没有,有没有其他方法可以做到这一点?
我正在运行Windows 7 - 64位,最新的XAMPP版本具有32位PHP版本.
在测试http://php.net/manual/en/function.fseek.php#112647上 有一个非常大的文件(大于PHP_MAX_INT 2147483647)时,我现在很确定,连续跟随fseeks在执行之前总结一下在filepointer上.
我有两个问题:
我可以用合理的方法解决这个总结(或者只用上面链接中提到的解决方法)吗?
这种聚合是在PHP中发生的(我假设,虽然我不知道在PHP中的哪个位置)或在Windows 7中?
回答自己:尝试使用多次搜索的两种解决方法对我的系统无效.相反,他们将文件指针放在PHP_MAX_INT下的不同位置.(32位PHP只能搜索到PHP_MAX_INT + 8192.从那里读取仍然是可能的,但我不知道到底有多远.)
因此,对于我的具体情况,这个问题已经过时,因为32位PHP只能访问PHP_MAX_INT + 8192,无论你做什么.我留下这个问题,因为有两个人投了票,可能对一般答案感兴趣.
我在这里提交了一个错误报告:
https://bugs.php.net/bug.php?
id = 69213结果:使用64位PHP构建它可能有用,但我没有尝试.
我想打开一个存储在Mobile内存中的pdf ...我正在尝试将文件的路径传递给Uri ..但它一直向我显示此错误"文件路径无效"但我确定我正在走正确的道路..
targetFile=new File("/data/data/package Name/app_mydir/test.pdf");
}
Intent intent;
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(targetFile), "application/pdf");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud) 我总是想知道JavaScript如何在null内部存储值.null不同于任何价值.我想范围的变量存储在某种结构数组中,每个结构对应一个变量.这个结构是否有某种名为"null"的布尔属性?
我会在V8源代码中自己查找,但我在C++代码中很丢失:(
我在谷歌上找不到任何东西.大多数结果与诸如"如何确定变量是否未定义或为空?"之类的问题有关.或类似的.
我正在使用依赖的第三方库thread_local.这导致我的程序__tls_init()重复调用,即使在某些周期的每次迭代中(我还没有检查所有这些),尽管thread_local变量已经被同一函数中早期的另一个调用无条件地初始化(事实上,在接近开始时)整个节目).
__tls_init()我的第一个指示x86_64是
cmpb $0, %fs:__tls_guard@tpoff
je .L530
ret
.L530:
pushq %rbp
pushq %rbx
subq (some stack space), %rsp
movb $1, %fs:__tls_guard@tpoff
Run Code Online (Sandbox Code Playgroud)
所以第一次按每个线程调用它时,值at %fs:__tls_guard@tpoff设置为,1并且进一步调用立即返回.但是,这意味着call每次thread_local访问变量时都会产生所有开销,对吧?
请注意,这是一个静态链接(实际上是生成!)函数,因此编译器"知道"它从这个条件开始,并且完全可以想象流分析发现不必多次调用此函数.但事实并非如此.
是否有可能摆脱多余的call __tls_init指令,或者至少阻止编译器在时间关键的部分发出它们?
实际编译的示例情况:( - O3)
pushq %r13
movq %rdi, %r13
pushq %r12
pushq %rbp
pushq %rbx
movq %rsi, %rbx
subq $88, %rsp
call __tls_init // always gets called
movq (%rbx), %rdi
call <some local function>
movq 8(%rax), %r12 …Run Code Online (Sandbox Code Playgroud) internal ×10
c# ×4
c++ ×2
32bit-64bit ×1
android ×1
asp.net ×1
class ×1
friend ×1
g++ ×1
interface ×1
javascript ×1
null ×1
optimization ×1
path ×1
pdf ×1
performance ×1
php ×1
protected ×1
unit-testing ×1
windows-7 ×1