我有一个对象来管理ini文件。
我将此对象设计为蜜蜂有两种使用方式:静态和非静态。因此,当我只需要一个值时,可以直接调用IniFile.Read
,也可以实例化IniFile
Object并执行一些操作。所有非静态函数都调用静态等效项,myIniFile.Read(sectionName, value, defaultValue)
调用IniFile.Read(iniPath, sectionName, value, defaultValue)
。
Read()
函数的最后一个参数为默认值。
我的问题是,当我调用IniFile.Read()
函数时,编译器不知道我是调用静态函数还是调用另一个函数。有办法解决这个问题吗?
public static string ReadValue(string filePath, string section, string key, string defaultValue="")
public string ReadValue(string Section, string Key, string defaultValue="")
答案 0 :(得分:2)
调用静态函数:
ClassName.Function();
对于非静态:
ClassName class_name = new ClassName();
class_name.Function();
答案 1 :(得分:1)
消除歧义的另一种方法-根据定义,您必须具有不同的签名,那就是使用命名参数;例如:
const NewsStack = createStackNavigator({
News: NewsScreen,
});
NewsStack.navigationOptions = {
tabBarLabel: 'News',
header: null,
tabBarIcon: ({ focused }) => (
<TabBarIcon
focused={focused}
name={
Platform.OS === 'ios'
? `ios-information-circle${focused ? '' : '-outline'}`
: 'md-information-circle'
}
/>
),
};
const AbosStack = createStackNavigator({
Abos: AboScreen,
});
AbosStack.navigationOptions = {
tabBarLabel: 'Abos',
header: null,
tabBarIcon: ({ focused }) => (
<TabBarIcon
focused={focused}
name={Platform.OS === 'ios' ? `ios-link${focused ? '' : '-outline'}` : 'md-link'}
/>
),
};
const MomentsStack = createStackNavigator({
Moments: MomentsScreen,
});
MomentsStack.navigationOptions = {
tabBarLabel: 'Moments',
header: null,
tabBarIcon: ({ focused }) => (
<TabBarIcon
focused={focused}
name={Platform.OS === 'ios' ? `ios-options${focused ? '' : '-outline'}` : 'md-options'}
/>
),
};
export default createBottomTabNavigator({
News: NewsStack,
Abo: AbosStack,
Moment: MomentsStack,
});
答案 2 :(得分:0)
如果使用类型名称显式地为方法添加前缀,则它应调用静态方法;例如:
public void InstanceCallSite()
{
ReadValue("a", "b", "c");
// or in the general case: someInstance.ReadValue("a", "b", "c");
Foo.ReadValue("a", "b", "c");
}
public static void StaticCallSite()
{
ReadValue("a", "b", "c");
}
public static string ReadValue(string filePath, string section, string key, string defaultValue = "")
{
Console.WriteLine("static");
return "";
}
public string ReadValue(string Section, string Key, string defaultValue = "")
{
Console.WriteLine("instance");
return "";
}
InstanceCallSite
用法输出:
instance
static