为什么在实现接口时,如果我将方法设为公共,我不必显式指定接口,但如果我将其设为私有,我必须...像这样(GetQueryString是IBar的方法):
public class Foo : IBar
{
//This doesn't compile
string GetQueryString()
{
///...
}
//But this does:
string IBar.GetQueryString()
{
///...
}
}
Run Code Online (Sandbox Code Playgroud)
那么为什么在私有方法时必须明确指定接口,而不是在方法公开时?
是否可以使这些东西工作(某种方式强制Objectfactory创建像Activator这样的实例)
在下面的例子中,所有东西都放在一个sigle组件中
public interface IUnitOfWorkFactory
{
IUnitOfWork Create();
}
internal class NHUnitOfWorkFactory : IUnitOfWorkFactory
{
public IUnitOfWork Create()
{
//// do needed stuff
}
}
Run Code Online (Sandbox Code Playgroud)
引导:
ObjectFactory.Configure(x =>
{
x.ForRequesedType<IUnitOfWorkFactory>.TheDefaultIsConcreteType<NHUnitOfWorkFactory>();
});
Run Code Online (Sandbox Code Playgroud)
用法:
IUnitOfWorkFactory factory = ObjectFactory.GetInstance<IUnitOfWorkFactory>();
Run Code Online (Sandbox Code Playgroud)
我的结果:
Porktal.Core.Tests.UnitOfWorkTests.Can_Start_Unit_of_Work : StructureMap.StructureMapException : StructureMap Exception Code: 207 Internal exception while creating Instance 'Porktal.Core.Data.NH.NHUnitOfWorkFactory, Porktal.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' of PluginType Porktal.Core.Data.IUnitOfWorkFactory. Check the inner exception for more details. ---- System.MethodAccessException : Porktal.Core.Data.NH.NHUnitOfWorkFactory..ctor() Stack Trace: at StructureMap.Pipeline.ConfiguredInstanceBase`1.StructureMap.Pipeline.IConfiguredInstance.Build(Type pluginType, BuildSession session, InstanceBuilder builder) at StructureMap.Pipeline.ConfiguredInstanceBase`1.build(Type …
我正在为一个小项目创建一个简单的类,并决定只为快速impl添加一个析构函数而不是使用IDisposable,每当有一个带有访问修饰符的析构函数时,我就遇到了编译器错误.
public class MyClass
{
public ~MyClass()
{
// clean resources
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过公共,私有,受保护和内部.没有访问修饰符,它工作正常.由于这篇文章显示 ~destructor本质上是一个受保护的Finalize函数的合成糖,因此我觉得奇怪的是你不能在析构函数上使用至少受保护的东西.文章确实说"无法调用析构函数.它们会被自动调用." 这是如何强制执行该行为的?
我最后只是实现IDisposable了,但我很好奇...... 还有其他原因你不能在析构函数上放置访问修饰符吗?
我正在研究源代码,java.util.HashMap我想看看hashcode函数在Entrys 的内部数组(这是一个软件包私有变量)中分配密钥的效果如何.所以我java.util在我的项目中创建了一个名为查看天气I 的软件包可以欺骗编译器认为它是相同的包.令人惊讶的是它工作,我写了以下代码:
package java.util;
public class HashMapExt<K, V> extends HashMap<K, V> implements Map<K, V> {
public static void main(String[] args) {
HashMapExt<Integer, String> mp = new HashMapExt<Integer, String>();
mp.put(1, "Hello");
mp.put(2, "Map");
mp.put(3, "Extention");
mp.printData();
}
void printData() {
System.out.println(Arrays.toString(table));
}
}
Run Code Online (Sandbox Code Playgroud)
它成功编译但在运行时它给出了一个例外:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 我有以下类接口:
class Test
{
public:
Test();
static void fun() const;
private:
int x;
static int i;
};
Run Code Online (Sandbox Code Playgroud)
Test.cpp包含fun()的实现:
void Test::fun() const
{
cout<<"hello";
}
Run Code Online (Sandbox Code Playgroud)
它给了我错误...... modifiers not allowed on static member functions
错误是什么意思?我想知道为什么我无法创建静态和const的函数.
让我们说我有班级狗:
public class Dog {
public String Breed { get; set; }
public String Color { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
和一类动物:
public class Animals {
public Dog[] Dogs { get; set; }
public Dog[] GetDogs() {
...
return Dogs;
}
...
}
Run Code Online (Sandbox Code Playgroud)
上面的类在我的类库中,我添加它作为我的项目的参考..一切正常但我想要的是谁使用这个库不应该能够使用类Dog,我的意思是他不应该做某事喜欢Dog dog = new Dog();.我试图让它内部,但是,我必须在课堂上写内部Animals,如果我这样做,我不能使用GetDogs()方法.
有什么建议?
我正在构建一个具有一些基本功能的DLL.长话短说,我正在制作一些静态类供开发者使用.这些类使用其他一些做脏工作的类,我将其标记为内部,因为我不希望人们访问它们.
问题是:如果我将一个类声明为内部类,那么其成员的访问级别是什么?
我必须将其所有成员标记为内部,否则它们会自动标记为内部成员?
这是一个好2小时,我正在和谷歌搜索在搜索计算器,我努力寻找一个清晰而直接的答案不包括1000揣测,技术不太可能hypotesis和无用的装饰...
MSDN像往常一样令人困惑(从未在msdn上找到明确的答案).
从我在这里可以阅读http://msdn.microsoft.com/en-us/library/ms173121.aspx我想无论你如何设置类访问级别,他的所有成员都将是私有的(方法,变量等等)上).
救命,我不知道
如果我用Java创建一个类,我总是被告知惯例是使一个类的所有字段都是私有的.如果我需要访问或更改它们,我可以创建一个accessor和mutator方法.我确实理解私有变量的重要性,因为它们有助于降低复杂性并允许封装.
我不明白的是,如果我创建一个公共访问者和mutator方法,那么那个变量是不是公共?为什么在任何人都可以访问私有变量的情况下仍然使用私有变量?
我还应该注意,我理解这些方法的重要性,但我想知道为什么我们懒得将变量设为私有,即使我们通过这些方法让任何人都可以访问它?
我不明白为什么这段代码会给我一个Intellisense错误.
public abstract class Node
{
protected abstract string ToText();
}
public class HtmlNode : Node
{
public List<Node> ChildNodes { get; set; }
protected override string ToText()
{
StringBuilder builder = new StringBuilder();
foreach (var node in ChildNodes)
builder.Append(node.ToText()); // <=== THIS IS THE ERROR
return builder.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面指出的行上,我收到错误:
错误CS1540:无法通过类型为"Node"的限定符访问受保护成员'Node.ToText()'; 限定符必须是'HtmlNode'类型(或从中派生)
HtmlNode派生自Node,为什么不能HtmlNode访问受保护的成员Node?
我将如何修改代码以使用"类型的限定符HtmlNode",如错误消息中所示?
C#7.2介绍了private protected修饰符,它的区别是internal protected什么?
来自doc:
私有受保护成员可以通过从包含类派生的类型访问,但只能在其包含的程序集中访问.
这究竟是什么internal protected呢?
access-modifiers ×10
c# ×7
.net ×2
java ×2
oop ×2
c++ ×1
class ×1
destructor ×1
interface ×1
internal ×1
member ×1
structuremap ×1