お世話になります。
C#でインターフェースに定義した抽象プロパティで、アクセシビリティまで設定したいです。
例として抽象プロパティHelloのgetをpublic、setをinternalに設定したい場合、次の様に書くと怒られます。
string Hello { get; internal set; } ←"アクセシビリティ修飾子をインターフェイスのアクセサーで使用することはできません。"
抽象プロパティにsetを定義せず、サブクラスでinternalを設定して実装する分には怒られませんが、
この場合はサブクラスに対してsetの実装を強制できませんし、
当然API(インターフェース)型変数からsetの実装を呼び出せません。

全てのクラスはAPIからのみ利用させたいと考えていて、
かつプロパティのset、getで設定したいアクセス修飾子が異なる様な場合、
プロパティを使用せず自前でアクセッサを作るしか無いのでしょうか?
何かおいしい逃げ方がありましたらご教示いただけるとありがたいです。
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

「インターフェイス」に定義するものは公開するもの、つまりアクセシビリティは常にpublicですからこれはどーしよーもありません。



代替案としては、インターフェイスではなく抽象クラスに定義して、その抽象プロパティのモディファイア(set)にうっかり飛んできたら例外でも飛ばすようにしておくなんてのはどうでしょうか。
    • good
    • 0
この回答へのお礼

確かにおっしゃる通りです。
自分が定義を勘違いしていたふしがあったようです。
そもそも私が「メソッドでやるしか」とかなんとかのたまっていましたが、
そもそもメソッドでやっても同じ事でした。
代替案をいただきます。
インターフェイスと抽象クラスとで定義を分けて、
万が一の予期しない使用に対してはアサートで落とすという方向で検討しようと思います。
ご回答ありがとうございました。

お礼日時:2011/04/19 16:33

interfaceを二つ用意する



public interface IHelloGet{string Hello { get;}}
internal interface IHelloGetSet{string Hello { get; set;}}
    • good
    • 0
この回答へのお礼

なるほど、そういう手もありましたか。
今回はコミットできませんが、今後の肥やしとさせていただきます。
ご回答いただき、ありがとうございました。

お礼日時:2011/04/19 16:23

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC++とC#

C,C++と進みC#
Visual C#がありますが
C++とC#の違いを教えてください.
C++とJAVAをたしたようなもの
なのでしょうか?

Aベストアンサー

文法/構文上の類似点は多々ありますが、「別物」です。
その相違について掲示板で列挙できるものではありません。
# 本を読んでください。

QC# ASP.NET でIPアドレスからアクセス元(国名)を探る

初めてこちらに投稿致します。宜しくお願い致します。

C# ASP.NETで外部公開向けのWebサイトを開発しておりますが、
あるページを見にきたユーザーが、どこの国からアクセスしに来られたのかを調査する仕組みを機能追加する事になりました。
開発に費用を掛けられない事から、IPアドレスの範囲/割当国の一覧のCSVを入手し、これに対して対象ページ表示時にIPアドレスを取得し、
このCSV(DB化します)とぶつけて、国名を割り出そうと進めております。
ご質問したいのが、そもそも取得すべきIPアドレスは、グローバルIPアドレスが必要なのでしょうか?
ネットで検索してみますと、クライアントのIPアドレスを取得する方法は多数紹介されていますが、こちらのIPアドレスを使用するのでしょうか?
基本的な質問になってしまいますが、ご教示お願い致します。
また、上記対応方法で何かサンプル等ご紹介されているようなのが、ございましたら併せてご教示お願い申し上げます。

Aベストアンサー

ASP.NET使ったコトありませんけど…。
# というかサーバサイドとかやったこともない。

>C# ASP.NETで外部公開向けのWebサイトを開発しておりますが

外部公開向けなのですから、接続してくるのはグローバルIPアドレスを持ったものから…ということになりますよね?
# メンテナンスなどでLAN内からのアクセスはあるのかも知れませんが。

ということで…
>そもそも取得すべきIPアドレスは、グローバルIPアドレスが必要なのでしょうか?
そうなるでしょうね。

>ネットで検索してみますと、クライアントのIPアドレスを取得する方法は多数紹介されていますが、こちらのIPアドレスを使用するのでしょうか?

他にIPアドレスの取得方法があれば別ですが……。
なお、プロクシ経由だった場合にどう対応するか?という問題はあるかも知れません。
プロクシが漏らしてくれた(?)接続元IPがローカルIPの可能性も否定はできませんし。
プロクシ経由だった場合に「プロクシのIPアドレス」と「プロクシの接続元のIPアドレス(取得できれば)」の2つで、後者がグローバルIPだったら前者で判定する…ということになるんじゃないでしょうか?
ただし、普通はないと思いますがLAN内のIPをプライベートIPアドレスではなくグローバルIPの一部を利用して構築されたネットワークに属するプロキシからのアクセス。という妙な構成がない。とは言えませんのでご注意を。
# まぁ、普通はそういうネットワークは構築しませんけどね。(設定したネットワークアドレスの外部のサイトに接続できなくなるから)

ASP.NET使ったコトありませんけど…。
# というかサーバサイドとかやったこともない。

>C# ASP.NETで外部公開向けのWebサイトを開発しておりますが

外部公開向けなのですから、接続してくるのはグローバルIPアドレスを持ったものから…ということになりますよね?
# メンテナンスなどでLAN内からのアクセスはあるのかも知れませんが。

ということで…
>そもそも取得すべきIPアドレスは、グローバルIPアドレスが必要なのでしょうか?
そうなるでしょうね。

>ネットで検索してみますと、クライアントのIPアドレスを...続きを読む

QC#とC++/CLIの連携について

C#とC++/CLIの連携について
C++/CLI側にC#で作成した変数を渡したいのですが、やり方がわかりません。

そもそも一つのソリューションにC++/CLIとC#を混在することはできるのでしょうか。
やはりC++/CLI側はDLLにして、C#がそのDLLを利用するのでしょうか。

Aベストアンサー

.NETの各種言語は混在することができます。
たとえば、C#でGUIの設計をし.NET用DLLを作成し、内部処理をC++でWin32APIを使って書き、C++/CLIでラップして、GUIと結び付ける、とかもできます。

「変数を渡す」というのが表現として良く分かりませんが、変数というよりはクラスを共有する感じになるかと思います。

とはいえC++/CLIはネイティブコードとマネージドコードを混ぜれるがゆえに、逆に色々と問題があるので、ちゃんとネットや本で調べたほうが良いかと思います。

Qクラスのメンバへのアクセス方法(C#)

クラスのメンバへのアクセス方法(C#)

テキストファイルから複数の情報を取得し、クラスの各メンバに格納しようとしています。
その際クラスのメンバ名をいちいち指定して情報を格納しているのですが美しくありません。
クラスのメンバはインデックスなどで指定することは出来ないのでしょうか?

例.
for (int i = 0; i < 3; i++)
{
str[i] = reader1.ReadLine();
}
data.name = str[0];
data.kind = str[1];
data.val = str[2];

これをこんな感じにしたい↓↓↓

for (int i = 0; i < 3; i++)
{
data.メンバ(i) = reader1.ReadLine();
}

C#初心者なのでトンチンカンな質問であってもご容赦ください。よろしくお願いします。

Aベストアンサー

VB.NETであれば、プロパティ名が配列になるクラスを作ることができますが、C#ではできません。
プロパティを配列としてアクセスしたい場合:インデクサ
プロパティをforeachで列挙アクセスしたい場合:イテレータ
を使います。

VB.NETの配列プロパティ:http://ufcpp.net/study/csharp/oo_indexer.html#indexed
インデクサ:http://ufcpp.net/study/csharp/oo_indexer.html
イテレータ:http://ufcpp.net/study/csharp/sp2_iterator.html

ご希望の機能はインデクサ、かな?

QC++ C# 語源

C++とC#(C++++)はかなり大雑把に言うとCの拡張版ですが、なぜ+が二個単位なのでしょうか。
C → C++ → C#
C+とC+++は存在しないのでしょうか。
C → C+ → C++ → C+++ → C#
もし存在しないのであれば、どのような理由でそうなったのでしょうか。

Aベストアンサー

C/C++のインクリメント演算子が、++だからじゃないでしょうか。

QASP.NET(C#)とhtmlの#include

webページで、
ヘッダー部分に、htmlのインクルード(#include virtual)を入れて、
C#側で、ログイン処理をするときに、ログインIDやパスワードなどのテキストボックスの値が読み取れません。

原因として、ヘッダーのインクルードのhtmlのformタグを削除したところ、
ログインIDなどのテキストボックスの値が読み取れました。
(※formタグの競合?)

インクルードのhtmlのformタグを削除せずに、テキストボックスの値を読み取る方法がないか教えてください。

Aベストアンサー

インクルードしているファイルのせいでASP.NETが想定しているのと違うかたちのHTMLが生成されてしまい、うまく動かない状態になっているのかもしれませんね。
ASP.NETの仕組みからいくとインクルードを利用することはそれほど想定されてないと思うので、インクルードの部分も含めてASP.NETで全部組み直したほうがいいような気はしますが。。。

どうしてもというのであれば、ASP.NETが生成するHTMLがどう動いているかをきちんと理解したうえで、インクルードするHTMLのほうでそれを邪魔しない形に調整するしかないかと思います。

QC#でできてC++でできないことは?(C#のメリットとは?)

これから新しい言語として、C#もしくはC++の勉強をしたいと
考えています。

C#にできてC++にできないこと、あるいはその逆でC++にはできて
C#ではできない。ということがあれば、教えていただけないでしょうか?

感覚としてはC++であれば何でもできるという感じではあるのですが、
C#を使うメリットってどんなことがありますか?
やはり、ビジュアル開発(コントロールのDrag&Dropで画面開発ができる)
の簡単さというところがC#でのメリットでしょうか?

ちなみに私はこれまで、C -> VB -> Java といった順で言語を習得
してきました。

Aベストアンサー

>C#にできてC++にできないこと
無いでしょう。
基本的にC/C++の場合コンパイラの種類に依りますが
内部にアセンブラを書くこともできますから
C/C++で出来ないことはC#でも出来ません。
(勿論#1さんの言われるように言語レベルの仕様で出来ない事はあります。)

簡単さでいうとC#です。VB6の開発経験があるとのことですが
VC#だとVBのフォームを作成するような感じでインターフェースを
作っていけます。(一応VC++でも可能)

一方C#で出来ないことですが
当然ですがフレームワークに依存しないソフトを作る事が出来ません。
Javaで作ったソフトがJREを必要とするのと同じです。
他にはCPUの特殊な命令(SSEやMMX)を呼び出すとかドライバの開発等も出来ません。

ちなみにVC++でもフレームワークは使えるので
フレームワークのガベージコレクション等を使うことは可能です。
(ただフレームワークを使うならC#の方が簡単です。)

QListViewのチェックボックス(C#)

ご教授下さい。

ListViewの中にチェックボックスを作りました。
次の画面に遷移するときに、ListView内のチェックボックスで選択された場所の値はどうとればいいのでしょうか?
10行の列があれば、チェックボックスで選択されたすべての行の番号を取得したいです。


宜しくお願いいたします・

Aベストアンサー

具体的に現在使用中のコードを公開しても支障ない範囲で投稿してみましょう

どのようなデータを与え、どのような操作をして、どのような結果がほしいのか
また、現状取得できる結果との差異はどうなっているのか
開発環境は何なのか、Windowsアプリなのか APS.NETなのか
など補足しましょう

ListViewなら SelectedItemsをチャックボックスのCheckedChangeイベントで操作するなどの方法が考えられます

QC#でCのコンソール出力の取得

C#でCのコンソール出力の取得
Cで作成したDLLをC#で利用しています。このときDLLファイルはC言語のprintfを使用しています。この出力内容を取得して、C#でテキストボックス等に表示する方法はありませんでしょうか。

Aベストアンサー

使ったこと無いのですが
Googleで調べたところ以下のWebページがヒットしました。

@IT
.NET TIPS
コンソール・アプリケーションの出力を取り込むには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

QC#のキーイベント取得

ASP.NET、C#でWebを開発しております。
ASP.NET 2.0,VssualStudio2005、です。

あるフォームでキー(例えばctlrキー)が、
押された場合に別のpageに飛ぶ。

ということをしたいのですが、
キーイベントはどうやって取得すればよいのでしょうか?

情報が少なくてすみませんが、どなたかご教授お願い致します。

Aベストアンサー

具体的なコードは知りませんが、ユーザーの PC のブラウザ上での話になるので C# ではなくクライアント サイドの JavaScript になると思います。
"JavaScript コントロールキー" あたりで調べると良いかと。
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=JavaScript+%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%AD%E3%83%BC&num=50


人気Q&Aランキング

おすすめ情報